我的表具有以下示例数据:
DECLARE @FHTable table (PK_ID int,FK_ID int,P_ID int, T_ID int, A_day int,A_hour TIME,D_day int,D_hour time)
INSERT INTO @FHtable VALUES (129,194,252,1005322,NULL,NULL,1,'02:30:00.0000000')
INSERT INTO @FHtable VALUES (130,194,311,1000891,3,'04:30:00.0000000',null,null)
INSERT INTO @FHtable VALUES (131,194,311,1000129,NULL,NULL,4,'03:30:00.0000000')
INSERT INTO @FHtable VALUES (132,194,252,1000025,6,'03:00:00.0000000',null,null)
SELECT * FROM @FHtable
我的最终结果应该是下表:
DECLARE @FinalResultTable TABLE (FK_ID int,P_IDFrom int,P_IDTO INT, T_IDFrom int,T_IDTo INT, A_day int,A_hour TIME,D_day int,D_hour time)
INSERT INTO @FinalResultTable VALUES (194,252,311,1005322,1000891,3,'04:30:00.0000000',1,'02:30:00.0000000')
INSERT INTO @FinalResultTable VALUES (194,311,252,1000129,1000025,6,'03:00:00.0000000',4,'03:30:00.0000000')
select * from @FinalResultTable
逻辑是每个FK_ID将有4行。第一行和第二行是目标的源,第三行和第四行也是目标的源。
能帮忙吗
答案 0 :(得分:0)
正如我在评论中指出的那样,尚不清楚将每次到达与相应离开相结合的逻辑是什么。
对我来说清楚的是您的标题错误:您不是正在谈论将行转换为列。相反,您只是将表的行按2分组。因此,您有2种方法,使用GROUP BY
或仅使用JOIN
,这取决于您的逻辑。
这里是一个例子:
select A.FK_ID,
A.PK_ID as P_IDFrom, B.PK_ID as P_IDTO,
A.T_ID as T_IDFrom int, B.T_ID as T_IDTo,
B.A_day, B.A_hour,
A.D_day, A.D_hour
from @FHTable A
join @FHTable B on B.PK_ID+1=A.PK_ID
where A.A_day is null
(这假设到达者的PK总是比出发时早+1)。