将一行中的数据连接到另一行的结果中

时间:2015-04-16 15:26:04

标签: sql sql-server

我有一个我正在努力的订单的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

1 个答案:

答案 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, '') = ''