【问题标题】: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。它们不一样。

标签: sql sql-server sum window-functions


【解决方案1】:

看起来您想要的是窗口总和而不是聚合。

即替换:

SUM(C.amount) as FINAL_AMOUNT

与:

SUM(C.amount) OVER(PARTITION BY A.NUMBER) as FINAL_AMOUNT

因此,您需要从查询中删除GROUP BY 子句。

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 1970-01-01
    • 2021-09-24
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多