Я хотел бы получить PIVOT
следующий результат запроса, чтобы отобразить столбец для каждого кода состояния проекта.Ошибки синтаксиса разворота TSQL
WITH r AS (
SELECT ROW_NUMBER() OVER (ORDER BY ph.InsertedDateTime) rownum,
CAST(ph.InsertedDateTime AS DATE) InsertedDate, ph.Gate_1_TargetDate, ph.Gate_2_TargetDate, ph.Gate_3_TargetDate
FROM PROJECT_HIST ph
JOIN (
SELECT ProjectID, MAX(InsertedDateTime) InsertedDateTime
FROM PROJECT_HIST
GROUP BY ProjectID, CAST(InsertedDateTime AS DATE)
) ph_distinct_date ON ph_distinct_date.InsertedDateTime = ph.InsertedDateTime
AND ph_distinct_date.ProjectID = ph.ProjectID
WHERE ph.projectid = 100957
AND NOT (
ph.Gate_1_TargetDate IS NULL
AND ph.Gate_2_TargetDate IS NULL
AND ph.Gate_3_TargetDate IS NULL
)
),
fubar AS (
SELECT rownum, InsertedDate, 0 gateName, NULL targetDate FROM r
UNION ALL
SELECT rownum, InsertedDate, 1, Gate_1_TargetDate FROM r
UNION ALL
SELECT rownum, InsertedDate, 2, Gate_2_TargetDate FROM r
UNION ALL
SELECT rownum, InsertedDate, 3, Gate_3_TargetDate FROM r
)
SELECT f1.InsertedDate 'Change Date', f1.gateName 'ProjectStageCode', f1.targetDate
FROM fubar f1
LEFT JOIN fubar f2 ON f2.rownum = f1.rownum - 1
AND f2.gateName = f1.gateName
PIVOT(min(f1.InsertedDate) FOR f1.gateName IN ([0],[1],[2],[3])) AS p
WHERE f1.rownum = 1
OR f1.targetDate <> f2.targetDate
ORDER BY f1.InsertedDate
;
Без попытки поворота, этот запрос в настоящее время возвращает этот результат для данного конкретного проекта:
То, что я хотел бы сделать, это повернуть запрос для создания столбцов для каждого кода этапа проекта в соответствии со следующим результатом:
По существу, мне нужно иметь строку для каждого уникального Change Date
и имеют значение targetDate
колонки заполнения в соответствующем вновь повернутом численном ProjectStageCode
колонке.