聚合多列数据,同时保持相同的行数

时间:2014-03-13 11:45:30

标签: sql-server

我有以下数据:( J-Job,T-Task,H-Hours)
工作包括由几小时组成的任务

J     T      H  
1     1      5   
1     1      3  
2     2      4  
2     3      2

我想得到以下结果:( S-for Job Hours Sum,P-Task Hours Sum)

J  S  T  P  H  
1  8  1  8  5   
1  8  1  8  3  
2  6  2  4  4  
2  6  3  2  2

我的意思是保留相同的数据,另外还有2列:
1)总结总工作时间
2)总结总任务时间

3 个答案:

答案 0 :(得分:2)

使用窗口功能非常简单。使用OVER (Partition BY)时,您可以使用聚合函数而无需更改其他行。

DECLARE @table TABLE ( J INT, T INT, H INT )

INSERT INTO @table
        ( J, T, H )
    VALUES  ( 1, 1, 5 )
    ,       ( 1, 1, 3 )
    ,       ( 2, 2, 4 )
    ,       ( 2, 3, 2 )

SELECT J
       ,SUM(h) OVER ( PARTITION BY j ) AS S
       ,T
       ,SUM(h) OVER ( PARTITION BY j, t ) AS S
       ,H
    FROM @table

答案 1 :(得分:0)

这样的东西
SELECT  *,
        SUM(H) OVER (PARTITION BY J) S,
        SUM(H) OVER (PARTITION BY J, T) P
FROM    YourTable

SQL Fiddle DEMO

查看OVER Clause (Transact-SQL)

答案 2 :(得分:0)

当然你可以通过使用窗口聚合函数

  

选择        s =总和(h)超过(J分区)       ,t =总和(h)OVER(J,T分区)       ,J       ,T       ,h来自dbo.your' s_table