0

我有一个表 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
4

3 回答 3

2

您需要为此使用GROUP_CONCAT

SELECT GROUP_CONCAT(DISTINCT State) AS State
 , Month, ID, SUM(Sales)
FROM Table1
GROUP BY Month, ID;

看到这个 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;

看到这个 SQLFiddle

于 2013-09-20T06:24:06.247 回答
1

请试试这个:

SELECT B.STATE, A.ID, SUM(A.SALES) AS SALES 
FROM MYTABLE A
INNER JOIN
  (SELECT DISTINCT 
   CASE WHEN A.state = B.STATE THEN A.STATE ELSE A.STATE+','+B.STATE END AS STATE,
   ID
   FROM MYTABLE A
   INNER JOIN MYTABLE B ON A.ID = B.ID) B
ON A.STATE = B.STATE
GROUP BY B.state, A.month, A.ID

如果它查询需要任何纠正,请告诉我。

于 2013-09-20T06:26:26.413 回答
0

您真正想要做的是称为分组而不是合并行。在聚合不同的值时,将具有共同值的几行分组。

使用 Group By 子句来实现上述目的:

select state,month,ID sum(sales)
from my_table
group by
state, month, ID

阅读更多关于group by的信息:http: //www.w3schools.com/sql/sql_groupby.asp

于 2013-09-20T06:02:41.510 回答