2011-01-12 44 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。看一看,看看是否适合您的需求。