Sql 基于另一列数据的列中的SUM()数据
我有一个sql表Sql 基于另一列数据的列中的SUM()数据,sql,sql-server-2008,Sql,Sql Server 2008,我有一个sql表 Project ID Employee ID Total Days 1 100 1 1 100 1 1 100 2 1 100 6 1
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()有点困惑。下面的查询生成两列:
EmployeeID
,totalDays
SELECT EmployeeID, SUM(totalDays) totalDays
FROM tableName
GROUP BY EmployeeID
后续问题:为什么在您想要的结果中,
projectId
是1和?这里有两种方法
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)
方法1:
Select ProjectId,EmployeeId,TotalDays = Sum(TotalDays)
From @t
Group By ProjectId,EmployeeId
;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
方法2:
Select ProjectId,EmployeeId,TotalDays = Sum(TotalDays)
From @t
Group By ProjectId,EmployeeId
;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
对于员工ID=200,项目ID=2???对不起,所有员工的项目ID都是相同的。我只是按照序列号,项目ID为1表示所有否,项目ID为1表示所有员工。抱歉,我打错了。如果是这种情况,并且您想包括项目ID,选择ProjectID,EmployeeID,SUM(totalDays)tableName组中按ProjectID、EmployeeID的totalDays,您可以进一步修改为此。