web-dev-qa-db-fra.com

Fusionner plusieurs lignes en une seule ligne avec sql

Dans un tableau source, chaque ligne représente les heures d'une journée pour une activité spécifique. Comment puis-je fusionner des lignes de jours en lignes de périodes distinctes sur l'employé, l'année, la période et l'activité avec sql?

Sélectionnez dans la table source:

SELECT [Employee]
      ,[Year]
      ,[Period]
      ,[Activity]
      ,[Day1]
      ,[Day2]
      ,[Day3]
      ,[Day4]
      ,[Day5]
      ,[Day6]
      ,[Day7]
FROM [HoursAccounting]
where Employee = '1234'

Résultat:

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

Ce que je veux, c'est un résultat comme:

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

Peut-il être fait en un seul choix?

3
René
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;
5
McNets