#sql #sql-server #sql-server-2014
#sql #sql-сервер #sql-server-2014
Вопрос:
Пример исходных данных:
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 |
Используя SQL Server 2014, у меня есть 2 запроса, которые мне нужно объединить, чтобы получить 1 таблицу, сгруппированную по «Проекту» с новыми столбцами «Emp» на основе статуса.
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'
Запрошенные данные:
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 |
Ответ №1:
Поскольку у вас фиксированное количество столбцов, вы должны быть в состоянии обойтись стандартным сводным запросом:
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