将行查询结果展平为并排列

时间:2016-06-22 04:15:40

标签: sql-server

我有一个父表

ID    Name
1     abc
2     def

和子表

ID   LineId   Item
1      1      A001
1      2      A002
2      1      B001
2      2      B002

子表中的ID是父表中的外键,ID和LineId构成子表中的主键。

我想根据' ID'加入这两个表格。从父表和子表生成一个平面结果,来自具有相同外键的子表的行成为列,如下所示:

ID    Name   Item1    Item2 .....
1     abc    A001     A002
2     def    B001     B002

1 个答案:

答案 0 :(得分:0)

您需要像这样使用动态SQL:

DECLARE @sql nvarchar(max) = 'SELECT p.ID, p.Name';

SELECT @sql = @sql + ',MAX(CASE WHEN c.LineId = ' + CAST(LineId as nvarchar(5)) + ' THEN c.Item END) As Item' + CAST(LineId as nvarchar(5))
FROM childTable
GROUP BY LineId;

SET @sql = @sql + ' FROM parentTable p JOIN childTable c ON p.ID = c.ID GROUP BY p.ID, p.Name';
EXEC(@sql);