使用sql将多行合并为一行

Ren*_*ené 3 sql-server aggregate

在源表中,每一行代表特定活动一天的小时数。如何使用 sql 将天的行合并到员工、年、期间和活动上不同的期间行?

从源表中选择:

SELECT [Employee]
      ,[Year]
      ,[Period]
      ,[Activity]
      ,[Day1]
      ,[Day2]
      ,[Day3]
      ,[Day4]
      ,[Day5]
      ,[Day6]
      ,[Day7]
FROM [HoursAccounting]
where Employee = '1234'
Run Code Online (Sandbox Code Playgroud)

结果:

Employee Year        Period      Activity   Day1    Day2    Day3    Day4    Day5    Day6    Day7
-------- ----------- ----------- ---------- ------- ------- ------- ------- ------- ------- -------
1234     2016        34          102002     7,5     0       0       0       0       0       0
1234     2016        34          102002     0       7,6     0       0       0       0       0
1234     2016        36          102002     0       7,5     0       0       0       0       0
1234     2016        36          102002     7,5     0       0       0       0       0       0
1234     2016        37          102002     0       4,5     0       0       0       0       0
1234     2016        37          104001     7,5     0       0       0       0       0       0
1234     2016        37          104001     0       0       0       4       0       0       0
1234     2016        37          104002     0       0       7,5     0       0       0       0
1234     2016        39          102002     0       0       7,5     0       0       0       0
1234     2016        39          102002     0       7,5     0       0       0       0       0
1234     2016        39          102002     0       0       0       7,5     0       0       0
1234     2016        39          102002     0       0       0       0       7,5     0       0
1234     2016        39          102002     7,5     0       0       0       0       0       0
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的结果:

Employee Year        Period      Activity   Day1    Day2    Day3    Day4    Day5    Day6    Day7
-------- ----------- ----------- ---------- ------- ------- ------- ------- ------- ------- -------
1234     2016        34          102002     7,5     7,6     0       0       0       0       0
1234     2016        36          102002     7,5     7,5     0       0       0       0       0
1234     2016        37          102002     0       4,5     0       0       0       0       0
1234     2016        37          104001     7,5     0       0       4       0       0       0
1234     2016        37          104002     0       0       7,5     0       0       0       0
1234     2016        39          102002     7,5     7,5     7,5     7,5     7,5     0       0
Run Code Online (Sandbox Code Playgroud)

可以一选一完成吗?

McN*_*ets 5

SELECT [Employee]
      ,[Year]
      ,[Period]
      ,[Activity]
      ,Sum([Day1]) as Day1
      ,Sum([Day2]) as Day2
      ,Sum([Day3]) as Day3
      ,Sum([Day4]) as Day4
      ,Sum([Day5]) as Day5
      ,Sum([Day6]) as Day6
      ,Sum([Day7]) as Day7
FROM [HoursAccounting]
where Employee = '1234'
group by Employee, [Year], Period, Activity;
Run Code Online (Sandbox Code Playgroud)