2012-10-25 233 views
2

我有一个SQL表SUM()数据基于另一列数据

Project ID  Employee ID   Total Days 

1     100     1 
1     100     1 
1     100     2 
1     100     6 
1     200     8 
1     200     2 

现在我需要这个表看起来像

Project ID  Employee ID   Total Days 

1     100     10 
1     200     10 

由于亚姆新的SQL,我是根据上述条件,很少使用SUM()。

+0

项目ID = 2为雇员ID = 200 ???? –

回答

2

这里有两种方法

Declare @t Table(ProjectId Int, EmployeeId Int,TotalDays Int) 
Insert Into @t Values(1,100,1),(1,100,1),(1,100,2),(1,100,6),(1,200,8),(1,200,2) 

Approach1:

Select ProjectId,EmployeeId,TotalDays = Sum(TotalDays) 
From @t 
Group By ProjectId,EmployeeId 

Approach2:

;With Cte As(
Select 
    ProjectId 
    ,EmployeeId 
    ,TotalDays = Sum(TotalDays) Over(Partition By EmployeeId) 
    ,Rn = Row_Number() Over(Partition By EmployeeId Order By EmployeeId) 
From @t) 
Select ProjectId,EmployeeId,TotalDays 
From Cte Where Rn = 1 

结果

ProjectId EmployeeId TotalDays 
1   100  10 
1   200  10 
2

以下查询产生两列:EmployeeID,totalDays

SELECT EmployeeID, SUM(totalDays) totalDays 
FROM tableName 
GROUP BY EmployeeID 

跟进的问题:为什么是你想要的结果projectId1 and 2

+0

对不起,项目编号对所有员工都是一样的。我只是跟着序列号,所有 –

+0

的项目编号都是1,所以这是一个错字:D –

+0

不,对于所有员工来说,项目编号都是1.我的Apolozise,I错误地输入。 –

1
select min("Project ID")as 'Project ID',"Employee ID" 
    , SUM("Total Days") as 'Total Days' 
from table1 
group by "Employee ID" 
相关问题