#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
Однако я не уверен, как это вписывается в ваше веб-приложение.