【问题标题】:How do I do the data restructure in SQL如何在 SQL 中进行数据重组
【发布时间】:2012-11-28 01:13:19
【问题描述】:

我有一个如下所示的订单表,其中每个组的每个订单记录都放在一行上。现在我想通过将一组的所有订单放在一个单元格中并用“,”分隔来使这个紧凑并按组聚合数据(结果表在原始表下方)。

您能告诉我如何在 SQL 中实现这一点吗?

非常感谢!

这是原始表格:

Group    Order
1        a
1        b
1        c
2        d
2        e
3        f

这是转换后的紧凑表:

Group    Orders
1        a,b,c
2        d,e
3        f

【问题讨论】:

标签: sql sql-server tsql plsql


【解决方案1】:

这会有所帮助

T-Sql (Sql Server 2005 +)

Declare @t Table([Group] Int, [Order] Varchar(20))
Insert Into @t Values(1,'a'),(1,'b'),(1,'c'),(2,'d'),(2,'e'),(3,'f')

Select [Group],
    Orders = Stuff((Select ',' + Cast([Order] As Varchar(100))
     From @t t2 Where t2.[Group] = t1.[Group]
     For Xml Path('')),1,1,'')
From @t t1
Group By t1.[Group]

PL/Sql Oracle 11g R2 +

SELECT [Group],ListAgg([Order],',') Within Group (Order By [Group]) Orders
FROM ORDER
GROUP BY [Group];

PL/Sql Oracle 10g +

SELECT [Group],WM_Concat([Order],',') Orders
FROM ORDER
GROUP BY [Group];

【讨论】:

  • 嗨,Niladri,您知道我们如何反向执行此过程吗?我的意思是我们首先将每个组的所有订单都放在一个单元格中,然后我们希望将它们扩展到每个组的多个记录。或者我们首先有底部/第二个表格,我们想将其更改为顶部/第一张表格的形式。谢谢!
  • @Lin Liu,这种情况请开新帖,我会贴出答案
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多