将有条件的行数据总和转换为列

问题描述 投票:0回答:1

我试图将行数据的总和放入列中,但无法使其工作。 这将返回 60 行,其中三列中每一行的总和正确(下图)。返回的所有其他值均为 NULL:

SELECT
    CASE WHEN f.month_period = 'January' AND f.year_period = 2023 THEN SUM(CASE WHEN e.status='A' THEN 1 ELSE 0 END) END 'January 2023 Count',
    CASE WHEN f.month_period = 'February' AND f.year_period = 2023 THEN SUM(CASE WHEN e.status='A' THEN 1 ELSE 0 END) END 'February 2023 Count',
    CASE WHEN f.month_period = 'March' AND f.year_period = 2023 THEN SUM(CASE WHEN e.status='A' THEN 1 ELSE 0 END) END 'March 2023 Count'   --etc.
FROM employees e
JOIN file_load f ON f.guid = e.guid
GROUP BY e.guid, f.month_period, f.year_period

结果:

但是如果我尝试这样做,我会得到我正在寻找的单行,但显然只有“一月”列中有总和数据:

SELECT
    CASE WHEN f.month_period = 'January' AND f.year_period = 2023 THEN SUM(CASE WHEN e.status='A' THEN 1 ELSE 0 END) END 'January 2023 Count',
    CASE WHEN f.month_period = 'February' AND f.year_period = 2023 THEN SUM(CASE WHEN e.status='A' THEN 1 ELSE 0 END) END 'February 2023 Count',
    CASE WHEN f.month_period = 'March' AND f.year_period = 2023 THEN SUM(CASE WHEN e.status='A' THEN 1 ELSE 0 END) END 'March 2023 Count'   --etc.
FROM employees e
JOIN file_load f ON f.guid = e.guid
WHERE f.month_period = 'January' AND f.year_period = 2023
GROUP BY e.guid, f.month_period, f.year_period

结果:

我还没有找到任何方法在 CASE WHEN 表达式“内”添加 WHERE 子句或 GROUP BY。

sql sql-server pivot
1个回答
0
投票

您不能有条件地使用聚合函数。在这种情况下,您只需在整个逻辑中使用单个 SUM 即可。

稍微绕道...不推荐使用字符串文字作为列别名。将列名称括在方括号中,或者更好的是,将格式保留在前端,并从列名称中删除空格等。

SELECT
    SUM(CASE WHEN f.month_period = 'January' AND f.year_period = 2023 and e.status='A' THEN 1 ELSE 0 END) 'January 2023 Count',
    SUM(CASE WHEN f.month_period = 'February' AND f.year_period = 2023 and e.status='A' THEN 1 ELSE 0 END) 'February 2023 Count',
    SUM(CASE WHEN f.month_period = 'March' AND f.year_period = 2023 and e.status='A' THEN 1 ELSE 0 END) 'March 2023 Count'   --etc.
FROM employees e
JOIN file_load f ON f.guid = e.guid
WHERE f.month_period = 'January' AND f.year_period = 2023
GROUP BY e.guid, f.month_period, f.year_period
© www.soinside.com 2019 - 2024. All rights reserved.