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)
可以一选一完成吗?
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)