我有一个表 my_table,其中包含列 state、month、ID 和 sales。
我的目标是将具有相同状态、月份、ID 的不同行合并为一行,同时将这些选定行的销售列汇总到合并行中。
例如:
state month ID sales
-------------------------------
FL June 0001 12,000
FL June 0001 6,000
FL June 0001 3,000
FL July 0001 6,000
FL July 0001 4,000
TX January 0050 1,000
MI April 0032 5,000
MI April 0032 8,000
CA April 0032 2,000
这是我应该得到的
state month ID sales
-------------------------------
FL June 0001 21,000
FL July 0001 10,000
TX January 0050 1,000
CA,MI April 0032 15,000
最佳答案
你需要为此使用 GROUP_CONCAT
:
SELECT GROUP_CONCAT(DISTINCT State) AS State
, Month, ID, SUM(Sales)
FROM Table1
GROUP BY Month, ID;
参见this SQLFiddle
更新(针对 SQL Server)
对于 SQL Server,您可以为此使用 STUFF()
:
SELECT state =
STUFF((SELECT DISTINCT ' , ' + state
FROM Table1 b
WHERE b.ID = a.ID
AND b.month = a.month
FOR XML PATH('')), 1, 2, '')
,month, ID, SUM(sales) AS Sales
FROM Table1 a
GROUP BY month,ID;
参见this SQLFiddle
关于mysql - 使用行合并进行聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18909855/