SQL服务器组通过显示哪些行

时间:2015-07-31 00:49:03

标签: sql sql-server

我有一个名为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

希望我不要求太多。

1 个答案:

答案 0 :(得分:4)

您正在寻找SUM OVER()功能:

SQL Fiddle

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('')

SQL Fiddle

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