2016-10-24 2 views
0

Beispiel der Ausgangsdaten:auf verschiedene Säulen

Project | Status | Emp1  | Emp2  | Emp3  | 
-------------------------------------------------------------- 
Project 1 | Active |  10  |  10  |  20  | 
Project 2 | Closed |  10  |  20  |  10  | 
Project 1 | Closed |  20  |  10  |  20  | 
Project 1 | Active |  20  |  20  |  10  | 
Project 2 | Active |  20  |  10  |  20  | 

Verwenden von SQL Server 2014 Ich habe 2 Abfragen, die ich brauche, um zu kombinieren 1 Tabelle von „Projekt“ gruppierte zu erhalten mit neuen Spalten von "Emp" basierend auf Status.

SELECT [Project], 
      SUM([Emp1]) as [Emp1_Act],      
      SUM([Emp2]) as [Emp2_Act], 
      SUM([Emp2]) as [Emp3_Act], 
     from t where status = 'Active' 
SELECT [Project], 
      SUM([Emp1]) as [Emp1_Clo],      
      SUM([Emp2]) as [Emp2_Clo], 
      SUM([Emp2]) as [Emp3_Clo], 
     from t where status = 'Closed' 

Angeforderte Daten:

Project | Emp1_Act | Emp2_Act | Emp3_Act | Emp1_Clo | Emp2_Clo | Emp3_Clo | 
    ----------------------------------------------------------------------------- 
    Project 1 | 30 | 30 | 30 | 10 | 20 | 10 | 
    Project 2 | 20 | 10 | 20 | 20 | 10 | 20 | 

Antwort

1

Weil Sie eine feste Anzahl von Spalten haben, sollten Sie in der Lage sein, weg Abfrage mit einer Standard-Dreh zu bekommen:

SELECT Project, 
     SUM(CASE WHEN Status = 'Active' THEN Emp1 ELSE 0 END) AS Emp1_Act, 
     SUM(CASE WHEN Status = 'Active' THEN Emp2 ELSE 0 END) AS Emp2_Act, 
     SUM(CASE WHEN Status = 'Active' THEN Emp3 ELSE 0 END) AS Emp3_Act, 
     SUM(CASE WHEN Status = 'Closed' THEN Emp1 ELSE 0 END) AS Emp1_Clo, 
     SUM(CASE WHEN Status = 'Closed' THEN Emp2 ELSE 0 END) AS Emp2_Clo, 
     SUM(CASE WHEN Status = 'Closed' THEN Emp3 ELSE 0 END) AS Emp3_Clo 
FROM t 
GROUP BY Project 
+0

Es funktioniert großartig, thx viel. – Dmitry

Verwandte Themen