2011-01-12 45 views
3

我的數據庫非常複雜,所以我將問題簡化到下表。SQL Server 2000 - 如何在查詢的最終結果中旋轉連接的結果?

TableATableBNameID字段在TableB相關。我正在嘗試創建一個SQL語句來產生所需的結果。我很瞭解JOINs以及它們是如何工作的,但我無法將此模糊化。

TableA中的每件商品都不會超過TableB中的2件商品。可能少於2個項目。

這將在SQL Server 2000服務器上使用。

表A

ID | Name 
---+----- 
1 | John 
2 | Jane 
3 | Bob 
4 | Doug 

表B

ID | NameID | Information 
---+--------+------------ 
1 | 1 | Apples 
2 | 1 | Apples 
3 | 2 | Pears 
4 | 2 | Grapes 
5 | 3 | Kiwi 

所需的結果

ID | Name | InformationA | InformationB 
---+------+--------------+------------- 
1 | John | Apples  | Apples 
2 | Jane | Pears  | Grapes 
3 | Bob | Kiwi   | NULL 
4 | Doug | NULL   | NULL 
+0

「小於2項」包括零?如果是這樣你想要顯示這些? – 2011-01-12 18:40:05

+0

我更改了TableB ID 5,NameID從4到3的示例數據。此更改與期望結果匹配。 – bobs 2011-01-12 18:41:29

+0

@Martin - 是的,TableB中可能有零個條目,結果應該包含該行。我會添加上面的例子@bobs - 感謝修復 – Justin808 2011-01-12 18:44:37

回答

3

(編輯,以得到優選排序爲兩列)

SELECT a.Id, 
     a.Name, 
     STUFF(MIN(STR(b.Id, 10) + b.Information), 1, 10, '') AS InformationA, 
     CASE 
     WHEN COUNT(b.Id) = 2 THEN STUFF(MAX(STR(b.Id, 10) + 
            b.Information), 1, 10, '') 
     END             AS InformationB 
FROM TableA a 
     LEFT JOIN TableB b 
     ON a.Id = b.NameId 
GROUP BY a.Id, 
      a.Name 
-1

我認爲你需要做的是pivot。看一看,看看是否適合您的需求。