SQL查询一对多

时间:2017-01-13 02:38:16

标签: sql sql-server-2008 tsql

我有两张桌子

表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的新手并且正在努力学习。

2 个答案:

答案 0 :(得分:1)

  

我是SQL的新手并且正在努力学习。

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

我会从"标准开始#34;每个客户/项目组合显示多行的查询:

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        |
+--------------+----------------+

然后将其留在显示图层(报表,表单,网页等)以处理每个客户的多个项目。在数据层的那一层动态添加列通常会更容易。

答案 1 :(得分:0)

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

尝试添加“分组1”。