SQL查询一对多
我有两张桌子 表1:客户SQL查询一对多,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有两张桌子 表1:客户 +----+-------+--+ | ID | Name | | +----+-------+--+ | 1 | Jhon | | | 2 | Doe | | | 3 | Magi | | +----+-------+--+ 表2:订单 +-------------+----------+--------------+ | OrderNumber | ItemName | PurchasedBy | +-------------+-----
+----+-------+--+
| 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中容易得多。