2
我有以下形式的CTE表达式:如何将行转换为CTE产生的列?
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
我试图让下面的形式的结果:
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 Pre Cur Post
1 John Blue 10 20 30
2 John Green 50 30 20
因为我正在使用CTE,我不确定我是否可以直接做到这一点,或者我应该多次自我加入结果以获得此结果(这只会使一切都看起来很漫长,丑陋和复杂)。有没有一个很好的方法来实现这一目标?
UPDATE:尝试这个返回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
任何建议,为什么发生这种情况?
lookup PIVOT ... –
@Mitch小麦:谢谢。我正在看它,但是我不太了解如何将它与CTE结合使用。我正在尝试它。如果我设法找到解决方案,将删除此问题。 – Legend
@MitchWheat:发表我的做法。虽然它返回预期的格式,但是,结果包含NULL值,我不确定为什么会发生这种情况。你有什么建议吗? – Legend