SQL Server 2000 - 如何在查询的最终结果中轮换联接结果?

发布于 2024-10-11 16:15:13 字数 845 浏览 4 评论 0原文

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

TableATableB 通过 TableB 中的 NameID 字段关联。我正在尝试创建一个 SQL 语句来产生所需的结果。我了解 JOIN 及其工作原理,但我无法弄清楚这一点。

对于 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

My database is quite complex so I've simplified my problem down to the tables below.

TableA and TableB are related by the NameID field in TableB. I am trying to create a SQL statement to produce the desired results. I'm understand JOINs and how they work but I can't fogure this out.

There will never be more than 2 items in TableB for each item in TableA. There could be less than 2 items.

This will be used on a SQL Server 2000 server.

TableA

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

TableB

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

Desired Result

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

木森分化 2024-10-18 16:15:13

(编辑以给出两列的首选顺序)

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  

(Edited to give the preferred ordering for the two columns)

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  
深白境迁sunset 2024-10-18 16:15:13

我认为您需要做的是pivot。看一下,看看是否适合您的需求。

I think what you need to do is a pivot. Take a look and see if that suits your needs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文