场景-我有一个订单列表,每个订单可以包含该订单的1个或多个部分。我希望能够返回零件组合以及每个零件组合已订购的次数的总和。订单A,B,C,D已订购2次。 A,B,C订购了1次...等。
我最初的想法是汇总每个订单的商品,然后对该数据进行分组(计数)。
答案 0 :(得分:0)
如果使用的是mySQL,请尝试此操作。否则,在您的dbms中使用适当的功能更改group_concat
。 STRING_AGG (item, ',')
用于sql server中的t-sql,string_agg(item, ',')
用于postgresSQL 9 +
select items, count(*)
from
(select order, GROUP_CONCAT(item ORDER BY item ASC) as items
from table
group by order) as orders
group by items
该子查询将每个订单的所有项目连续放置。
select order, GROUP_CONCAT(item ORDER BY item ASC) as items
from table
group by order
另一个查询计算您想要的内容。
答案 1 :(得分:0)
由于STRING_AGG()
仅在SQL Server 2017中可用,因此这是Kristjan Kica的答案版本,它使用STUFF()
和FOR XML
代替。
SELECT
items
,COUNT(*)
FROM
(
SELECT
yt.[order]
,items = STUFF((
SELECT ',' + t1.item
FROM YourTable t1
WHERE t1.[order] = yt.[order]
FOR XML PATH('')
) , 1, 1, '')
FROM YourTable yt
GROUP BY [order]
) orders
GROUP BY items