【问题标题】:Concatenating data from one row into the results from another将一行中的数据连接到另一行的结果中
【发布时间】:2015-04-16 23:57:13
【问题描述】:

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

所以我可以加入另一个表来理解这一点,它涉及实际上是一个订单的三行。

联合订单:

     ID              Related ID
-----------------------------------------------------------------
      5                  3 
      5                  4  

我对 SQL 有点陌生,虽然我可以加入另一个表并过滤以仅获取与 Order 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

【问题讨论】:

  • 可怜的你,不得不处理糟糕的桌子设计。您需要使用 GROUP BY 和某种 GROUP_CONCAT(或任何 MS SQL Server 调用它)进行 JOIN。
  • 正如@jarlh 提到的,您需要MySQL GROUP_CONCAT 的SQL Server 等效项。不幸的是,该功能不存在。不过这个问题之前有人问过,看这个帖子:stackoverflow.com/questions/451415/…

标签: sql sql-server


【解决方案1】:

您应该首先考虑更改架构。下面的查询可能会帮助您了解如何使用您当前的设计来完成它。

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

【讨论】:

  • 语法错误,第 4 行:"Where OI.ID (Select"
  • 抱歉,“in”不见了。 "OI.ID 在哪里 (Sel..."
  • 我现在没有 SSMS 来测试它,所以请随意纠正它们...
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 2013-10-28
相关资源
最近更新 更多