【发布时间】: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