我有一个名为phonecalls的表,它存储来自公司的电话记录历史记录
ID Number Duration Cost
-------------------------------------
1 123456 13 1
2 222222 39 1
3 333333 69 2
4 222222 36 1
我想要做的是获得每个数字的持续时间和成本之和。
SELECT
Number,
SUM(Duration) as [Total_Duration],
SUM(Cost) as [Total_Cost]
FROM
phonecalls
GROUP BY
Number;
现在问题是我还需要将每个组中包含的ID作为审计目的,以便其他人知道哪些行已处理。所以我的问题是当你分组时如何包含id?
万能的Stackoverflow请帮帮我。
提前致谢。
- 编辑:
是否可以在一个单元格中获取具有相同编号的所有ID?
之类的东西ID Number Total_Duration Total_Cost
---------------------------------------------------
1 123456 13 1
2,4 222222 75 2
3 333333 69 2
希望我不要求太多。
答案 0 :(得分:4)
您正在寻找SUM OVER()
功能:
SELECT
ID,
Number,
Total_Duration = SUM(Duration) OVER(PARTITION BY Number),
Total_Cost = SUM(Cost) OVER(PARTITION BY Number)
FROM phonecalls
如果要连接ID
,可以使用FOR XML PATH('')
:
SELECT
ID = STUFF((
SELECT ',' + CONVERT(VARCHAR(10), ID)
FROM phonecalls
WHERE Number = p.Number
FOR XML PATH('')
), 1, 1, ''),
Number,
Total_Duration = SUM(Duration),
Total_Cost = SUM(Cost)
FROM phonecalls p
GROUP BY Number