【发布时间】:2011-10-11 06:55:32
【问题描述】:
我有一个如下形式的 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
关于为什么会发生这种情况的任何建议?
【问题讨论】:
-
@Mitch Wheat:谢谢。我正在查看它,但我并不真正了解如何将它与 CTE 结合使用。目前正在尝试。如果我设法找到解决方案,将删除此问题。
-
@MitchWheat:发布了我的方法。虽然它返回预期的格式,但结果包含
NULL值,并且不确定为什么会发生这种情况。你有什么建议吗?
标签: sql sql-server sql-server-2008 common-table-expression