拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 SQLServer2008与groupby和case。分组方式不起作用

SQLServer2008与groupby和case。分组方式不起作用

白鹭 - 2022-03-09 2117 0 0

有人可以帮我通过 group by 解决我的问题吗

我有这个 SQL 代码(在 SQL Server 2008 中)

SELECT DISTINCT
    '2' AS report,
    DepartmentName,
    CASE 
        WHEN @GroupBy = 'Division' THEN DivisionName
        WHEN @GroupBy = 'Department' THEN '' 
    END AS DivisionName,
    Rank,
    CASE 
        WHEN DivisionName = '' THEN NULL 
        ELSE AVG(Amount) 
    END AS Amount,
FROM
    #Report
GROUP BY
    DepartmentName,
    DivisionName,
    Rank

它不是按部门分组(我得到 3 个 Category1,因为它们属于 3 个不同的部门)。你知道为什么吗?

2   Group   0   Category1
2   Group   0   Category1               
2   Group   0   Category1               
2   Group   0   Category2               
2   Group   0   Category3                   
2   Group   0   Category4       
2   Group   0   Category15  

非常感谢!

uj5u.com热心网友回复:

事实是,如果我们看不到源资料,我们就无法回答。我敢猜测这是戴尔在评论中提到的:

如果您的 3 Category1[DivisionName]原始 table 中有不同的s ,它们将作为单独的行回传。Group By在 之前“执行” select,因此如果您想根据计算建立新资料,您应该在派生表中执行此操作:

SELECT 
    '2' AS report,
    DepartmentName,
    derived_table.DivisionName, -- alias added
    Rank,
    CASE 
        WHEN derived_table.DivisionName = '' THEN NULL 
        ELSE AVG(Amount) 
    END AS Amount,
FROM
    #Report
    cross apply
    (
        select  CASE 
                    WHEN @GroupBy = 'Division' THEN DivisionName
                    WHEN @GroupBy = 'Department' THEN '' 
                END AS DivisionName
    ) as derived_table
GROUP BY
    DepartmentName,
    derived_table.DivisionName,
    Rank
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *