如何选择多列并按一列分组
Posted
技术标签:
【中文标题】如何选择多列并按一列分组【英文标题】:How to select multiple columns and group by one column 【发布时间】:2020-08-05 16:13:26 【问题描述】:我想根据 number
列对 C.AMOUNT 求和。例如number
列在相同的4个数字中,那么我想根据number
列中的相同数字对列C.AMOUNT
求和,并在FINAL_AMOUNT
列中显示求和列
SELECT A.NUMBER,
B.AGE,
C.PRODUCT_NAME,
SUM(C.AMOUNT) AS FINAL_AMOUNT,
(CASE
WHEN C.PRODUCT_NAME LIKE '%D%'
THEN 'Y'
ELSE 'N'
END) AS D,
(CASE
WHEN C.PRODUCT_NAME LIKE '%E%'
THEN 'Y'
ELSE 'N'
END) AS E,
(CASE
WHEN C.PRODUCT_NAME LIKE '%F%'
THEN 'Y'
ELSE 'N'
END) AS F,
(CASE
WHEN C.PRODUCT_NAME LIKE '%G%'
OR C.PRODUCT_NAME LIKE '%H%'
OR C.PRODUCT_NAME LIKE '%J%'
THEN 'Y'
ELSE 'N'
END) AS J
FROM [A].[DBO].[A]
LEFT JOIN [B].[DBO].[B] B ON A.NUMBER = B.NUMBER
LEFT JOIN [C].[DBO].[C] C ON A.NUMBER = C.NUMBER
WHERE B.REPORT_DATE = '20200728'
GROUP BY A.NUMBER;
这是我使用的查询,但我发现这样的错误:
消息 8120,级别 16,状态 1,行 1 列“B.DBO.B”在 选择列表,因为它不包含在任一聚合中 函数或 GROUP BY 子句。
【问题讨论】:
我删除了 mysql 标签,因为它看起来像是在使用 SQL Server。它们不一样。 【参考方案1】:看起来您想要的是窗口总和而不是聚合。
即替换:
SUM(C.amount) as FINAL_AMOUNT
与:
SUM(C.amount) OVER(PARTITION BY A.NUMBER) as FINAL_AMOUNT
因此,您需要从查询中删除GROUP BY
子句。
【讨论】:
以上是关于如何选择多列并按一列分组的主要内容,如果未能解决你的问题,请参考以下文章