我有以下形式的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
有关为何发生这种情况的任何建议?
答案 0 :(得分:1)
我的坏!透视需要实际值。我是盲目跟随MSDN的例子。无论如何,以下工作:
WITH nCTE AS
(
SELECT *
FROM
TableA X INNER JOIN TableB Y
ON X.ID = Y.ID
)
SELECT ID, Name, Badge, [Pre] AS 'Pre', [Cur] AS 'Cur', [Post] AS 'Post'
FROM
(
SELECT *
FROM
(
SELECT ...
FROM nCTE
)
WHERE ...
GROUP BY ...
) Y
PIVOT
(
MAX(Value)
FOR Type IN ([Pre], [Cur], [Post])
) AS PivotTable
ORDER BY ...