2016-06-22 58 views
0

我有一個父表拼合查詢結果是由方列

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 
+0

最大LineID 2? 'MAX(案例當LineID = 1 THEN Item)Item1,MAX(案例當LineID = 2 THEN Item)Item2',按ID和名稱分組。有關更多信息,請使用案例聚合搜索組。 – ZLK

+0

LineId只是特定ID的每個條目的關鍵。它的最大值不是2,如果有超過2個條目的ID(外鍵) – Harrobbed

+0

我可以問最大數是2,因爲這只是簡單的'MAX(CASE ...'查詢。例如'Select P.ID,P.Name,MAX(CASE WHEN LineID = 1 THEN Item)Item1,MAX(CASE WHEN LineID = 2 THEN Item)Item2 FROM tblParent P JOIN tblChild C ON C.ID = P.ID GROUP BY P.ID,P.Name'。如果LineID可以增長到任意大小,那麼您需要使用動態SQL(基於最大LineID) – ZLK

回答

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);