SQL Server 使用递归查询SQL的源和目标

q9yhzks0  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(117)

我无法得到一些表列,因为它需要recursive query,我不擅长。所以基本上,如果是直接转移,那么备注部分可能是空的。如果在起点和终点之间有一个停止,那么我需要添加站到我的备注栏。

A to B -> nothing
B to C -> Via B
C -> D -> Via B,C

SQL查询为:

CREATE TABLE IPhone (Id int, Country NVARCHAR(12), seqNo int, Send datetime2(0), Arrive datetime2(0));

INSERT INTO IPhone VALUES 
('1001','America','1', '2022-11-23 18:30:00.000',null),
('1002','China','2', '2022-11-24 08:18:00.000','2022-11-24 05:00:00'),
('1003','Argentina','3', '2022-11-25 18:30:00.000','2022-11-24 18:18:00.000'),
('1004','Saudi Arabia','4',null,'2022-11-25 20:30:00.000');

已尝试

select  f.id,f.Country CountryFrom, t.Country CountryTo
, convert(varchar(4),f.seqNo) + '-' + convert(varchar(4),t.seqNo) seqNo
, f.Send, t.Arrive,concat('VIA ', f.Country ,', ', t.Country) Remarks from IPhone f inner join IPhone t on f.seqNo < t.seqNo order by id;

给予

**要求如下。**我已经厌倦了研究How to create a MySQL hierarchical recursive query?,但我无法得到预期的结果。感谢您的帮助。

zf9nrax1

zf9nrax11#

不需要递归查询,这应该可以实现http://sqlfiddle.com/#!18/8843 a/1

SELECT f.id,
       f.country                      CountryFrom,
       t.country                      CountryTo,
       CONVERT(VARCHAR(4), f.seqno) + '-'
       + CONVERT(VARCHAR(4), t.seqno) seqNo,
       f.send,
       t.arrive,
       CASE
         WHEN t.seqno - f.seqno = 1 THEN ''
         ELSE (SELECT 'VIA '
                      + (SELECT LEFT(country, Len(country) - 1)
                         FROM   (SELECT country + ', '
                                 FROM   iphone
                                 WHERE  seqno BETWEEN f.seqno + 1 AND
                                                      t.seqno - 1
                                 FOR xml path ('')) c (country)))
       END                            Remarks
FROM   iphone f
       INNER JOIN iphone t
               ON f.seqno < t.seqno
ORDER  BY id;

ezykj2lf

ezykj2lf2#

如果像评论中提到的那样,你使用MS SQL,你可以这样构造递归查询。

with base as (

   <some initial data select>

    UNION ALL

    select ...
    from base
    
)
select ...

相关问题