2

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

你能告诉我如何在 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
4

1 回答 1

3

这将有助于

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];

在此处输入图像描述

于 2012-11-28T02:40:49.793 回答