【问题标题】:How to sum and group in one column如何在一列中求和和分组
【发布时间】:2022-11-18 05:45:33
【问题描述】:

我只是为这个问题创建了一个示例,所以不要看表本身。

我有这张表 (see image),它是自动填充的,因此我无法更改列。

我正在尝试用查询总结表并将其保存在另一个表中。我需要按 DepartmentName、Date 和 Turn 进行分组,并创建一个“列表”,根据轮次显示国籍总数(例如:5 EN、5 US、5 ES、5 FR)。

这应该是输出(其中 Quantity 是基于 Turn 的总量,OtherNationalities 是基于 Turn 的国籍列表):

DepartmentName Date Turn Quantity OtherNationalities
Marketing 2022-11-17 Afternoon 30 4 ES, 6 FR
Marketing 2022-11-17 Morning 30 4 ES, 6 FR
Sales 2022-11-17 Afternoon 20 5 EN, 5 US
Sales 2022-11-17 Morning 20 5 EN, 5 US
Sales 2022-11-17 Night 20 5 EN, 5 US
Sales 2022-11-18 Afternoon 20 5 EN, 5 US
Sales 2022-11-18 Morning 20 5 EN, 5 US
Sales 2022-11-18 Night 20 5 EN, 5 US

这是我到目前为止所做的代码:

SELECT DepartmentName, Date, Turn,
    SUM(CASE
        WHEN Turn = 'Morning' THEN MorningQuantity
        WHEN Turn = 'Afternoon' THEN AfternoonQuantity
        WHEN Turn = 'Night' THEN NightQuantity
    END) AS Quantity,
    CASE
        WHEN Turn = 'Morning' THEN STRING_AGG(CAST(MorningQuantity AS VARCHAR(3)) + ' ' + Nationality, ', ')
        WHEN Turn = 'Afternoon' THEN STRING_AGG(CAST(AfternoonQuantity AS VARCHAR(3)) + ' ' + Nationality, ', ')
        WHEN Turn = 'Night' THEN STRING_AGG(CAST(NightQuantity AS VARCHAR(3)) + ' ' + Nationality, ', ')
    END AS OtherNationalities
FROM DummyTable
GROUP BY DepartmentName, Date, Turn

这是输出:current output

它几乎可以工作,但数据可能会出现一些重复(不要问我为什么,因为我不知道......)但它们必须添加到 Quantity 和 OtherNationalities 列。

我不知道如何对该列 (OtherNationalities) 进行分组和求和以获得“4 ES,6 FR”。我感谢任何建议和帮助!

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    自连接是一个想法:

    SELECT DepartmentName, Date, Turn,
        SUM(CASE
            WHEN Turn = 'Morning' THEN MorningQuantity
            WHEN Turn = 'Afternoon' THEN AfternoonQuantity
            WHEN Turn = 'Night' THEN NightQuantity
        END) AS Quantity,
        q2.OtherNationalities
    FROM 
        DummyTable d1
        cross appy
        (
            select OtherNationalities = string_agg(q1.Nationality,',')
            from 
                (
                    select distinct Nationality
                    from DummyTable d2
                    where d2.DepartmentName=d1.DepartmentName and d2.Date=d1.Date and d2.Turn=d1.Turn
                )q1
        )q2
    GROUP BY DepartmentName, Date, Turn, q2.OtherNationalities
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2015-06-02
      相关资源
      最近更新 更多