SQL查询一对多

SQL查询一对多,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有两张桌子 表1:客户 +----+-------+--+ | ID | Name | | +----+-------+--+ | 1 | Jhon | | | 2 | Doe | | | 3 | Magi | | +----+-------+--+ 表2:订单 +-------------+----------+--------------+ | OrderNumber | ItemName | PurchasedBy | +-------------+-----

我有两张桌子

表1:客户

+----+-------+--+
| ID | Name  |  |
+----+-------+--+
|  1 | Jhon  |  |
|  2 | Doe   |  |
|  3 | Magi  |  |
+----+-------+--+
表2:订单

+-------------+----------+--------------+
| OrderNumber | ItemName | PurchasedBy  |
+-------------+----------+--------------+
|         111 | Shirt    | 1            |
|         222 | Pant     | 2            |
|         333 | Trouser  | 2            |
|         444 | T-Shirt  | 3            |
|             |          |              |
+-------------+----------+--------------+
我需要写一个查询,如下表所示

+--------------+----------------+----------------+
| CustomerName | PurchasedItem1 | PurchasedItem2 |
+--------------+----------------+----------------+
| Doe          | Pant           | Trouser        |
| Jhon         | Shirt          | Null           |
| Magi         | T-Shirt        | Null           |
+--------------+----------------+----------------+
谁能给我一个解决方案?我是SQL新手,正在努力学习

我是SQL新手,正在努力学习

您应该学习的一件事是不要在单独的列中显示多个相关项。动态添加列在SQL中并不简单,因为它设计用于处理静态列和多行

我将从一个“标准”查询开始,该查询显示每个客户/项目组合的多行:

SELECT 
    c.Name CustomerName, 
    o.ItemName PurchasedItem
FROM Customers c
INNER JOIN Orders o
  ON c.ID = o.PurchasedBy
这会给你结果

+--------------+----------------+
| CustomerName | PurchasedItem  |
+--------------+----------------+
| Doe          | Pant           |
| Doe          | Trouser        | 
| Jhon         | Shirt          |
| Magi         | T-Shirt        |
+--------------+----------------+
然后将其留给显示层(报表、表单、网页等)处理每个客户的多个项目。在该层动态添加列通常比在数据层更容易

SELECT 
    c.Name CustomerName, 
    o.ItemName PurchasedItem
FROM Customers c
INNER JOIN Orders o
  ON c.ID = o.PurchasedBy
GROUP BY 1

尝试添加“groupby1”。

如果您是SQL新手,请不要养成在单独的列中显示多个相关项的习惯。如果一个客户有3个项目呢?100? 为每个客户/项目组合创建一行。在显示层(报表、网页、表单等)中动态添加列比在SQL中容易得多。