Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于另一列数据的列中的SUM()数据_Sql_Sql Server 2008 - Fatal编程技术网

Sql 基于另一列数据的列中的SUM()数据

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

我有一个sql表

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,您可以进一步修改为此。