我有一个我正在努力的订单的SQL Server数据库。对于正常订单,单个表提供以下结果:
订单:
ID Customer Shipdate Order ID
-----------------------------------------------------------------
1 Tom 2015-01-01 100
2 Bob 2014-03-20 200
在某些时候,他们需要由多个客户下达的订单。因此,他们为每个客户创建了一行,并将记录分成多行。
订单:
ID Customer Shipdate Order ID
-----------------------------------------------------------------
1 Tom 2015-01-01 100
2 Bob 2014-03-20 200
3 John
4 Dan
5 2014-05-10 300
所以我可以加入另一个表来理解这个实际上是一个订单的三行。
Joint.Orders:
ID Related ID
-----------------------------------------------------------------
5 3
5 4
我对SQL不熟悉,虽然我可以加入另一个表并过滤到只获取与订单ID 300相关的数据,但我真正喜欢的是连接客户,但是在搜索了一段时间后,我无法看到如何做到这一点。我真正希望实现的是输出:
ID Customer Shipdate Order ID
----------------------------------------------------------------
1 Tom 2015-01-01 100
2 Bob 2014-03-20 200
5 John, Dan 2014-05-10 300
答案 0 :(得分:0)
您应该考虑首先更改架构。以下查询可能有助于您了解如何使用当前设计。
Select * From Orders Where IsNull(Customer, '') <> ''
Union All
Select ID,
Customer = (Select Customer + ',' From Orders OI Where OI.ID (Select RelatedID from JointOrders JO Where JO.ID = O.ID)
,ShipDate, OrderID
From Orders O Where IsNull(O.Customer, '') = ''