SQL Server 2000 - 如何在查询的最终结果中旋转连接的结果?

时间:2011-01-12 18:32:45

标签: sql-server tsql sql-server-2000

我的数据库非常复杂,所以我将问题简化为下表。

TableATableBNameID中的TableB字段相关联。我正在尝试创建一个SQL语句来产生所需的结果。我理解JOINs以及它们是如何工作的但是我无法模糊这一点。

TableB中的每个项目TableA中的项目永远不会超过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

2 个答案:

答案 0 :(得分: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 :(得分:-1)

我认为您需要做的是pivot。看看是否符合您的需求。