У меня есть выражение CTE следующей формы:
WITH nCTE AS
(
SELECT *
FROM
TableA X INNER JOIN TableB Y
ON X.ID = Y.ID
)
SELECT *
FROM
(
SELECT ...
FROM nCTE
)
WHERE ...
GROUP BY ...
ORDER BY ...
Результаты этого запроса выглядят примерно так:
ID Name Badge Type Value
1 John Blue Pre 10
1 John Blue Post 20
1 John Blue Cur 30
1 John Green Pre 50
1 John Green Post 30
1 John Green Cur 20
Я пытаюсь получить результаты вследующая форма:
ID Name Badge Pre Cur Post
1 John Blue 10 20 30
2 John Green 50 30 20
Поскольку я использую CTE, я не уверен, могу ли я сделать это прямым способом, или я должен сам объединить результаты несколько раз, чтобы получить это (это простовсе выглядит долго, некрасиво и сложно).Есть ли хороший способ добиться этого?
ОБНОВЛЕНИЕ: Попытка этого возвращает значение NULL
WITH nCTE AS
(
SELECT *
FROM
TableA X INNER JOIN TableB Y
ON X.ID = Y.ID
)
SELECT ID, Name, Badge, [0] AS 'Pre', [1] AS 'Cur', [2] AS 'Post'
FROM
(
SELECT *
FROM
(
SELECT ...
FROM nCTE
)
WHERE ...
GROUP BY ...
) Y
PIVOT
(
MAX(Value)
FOR Type IN ([0], [1], [2])
) AS PivotTable
ORDER BY ...
Пока работает сам запрос, он возвращает следующее:
ID Name Badge Pre Cur Post
1 John Blue NULL NULL NULL
2 John Green NULL NULL NULL
Есть какие-нибудь предложения относительно того, почему это происходит?