Уникальный сценарий группировки SQL

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть запрос, который возвращает сводную таблицу из некоторых временных данных:

 SELECT *
FROM TIME
WHERE CONVERT(DATETIME,DATE,101) >= '2019-02-24' AND CONVERT(DATETIME,DATE,101) <= '2019-03-02'),
Pivoted AS (
  SELECT *
  FROM QueryTable
  PIVOT (max (DURATION) for DATE in ([02/24/2019],[02/25/2019],[02/26/2019],[02/27/2019],[02/28/2019],[03/01/2019],[03/02/2019])) as pvt
), ProcessTable As ( 
  SELECT 
    EmpID, JOB, ITEM, PITEM, PROJ, [02/24/2019],[02/25/2019],[02/26/2019],[02/27/2019],[02/28/2019],[03/01/2019],[03/02/2019], NOTE
  FROM Pivoted
  WHERE EmpID = '171'
  GROUP BY EmpID,  JOB, ITEM, PITEM, PROJ, [02/24/2019],[02/25/2019],[02/26/2019],[02/27/2019],[02/28/2019],[03/01/2019],[03/02/2019], NOTE
)
SELECT * FROM ProcessTable
  

Даты и EmpID динамически заполняются веб-приложением, эти значения являются просто заполнителями. Текущий результат этого запроса таков:

введите описание изображения здесь

Я хотел бы сгруппировать таблицу еще раз, чтобы получить конечный результат, который выглядит следующим образом:

введите описание изображения здесь

Достижимо ли это?

Ответ №1:

Вы можете легко выразить это как условную агрегацию:

 select job, item, pitem,
       max(case when date = '2019-02-24' then duration end) as dur_20190224,
       max(case when date = '2019-02-25' then duration end) as dur_20190225,
       . . . 
from QueryTable
where . . .  -- your conditions here
group by job, item, pitem
  

Однако я не уверен, как это вписывается в ваше веб-приложение.