Kee*_*ker 3 sql t-sql sql-server sql-server-2005
我正在创建一个论坛,所以我创建了一个包含帖子的表格.其中一个字段是Body
类型的XML
.现在我想创建一个查询,返回所有帖子和每个帖子的子节点数.我用聚合函数做这个.当我使用聚合函数时,我需要使用一个组.当我在中使用该字段时group by
,我将得到以下异常:
除非使用IS NULL运算符,否则无法比较或排序XML数据类型.
我怎么解决这个问题?
我的查询是:
SELECT
Post.PostId, Post.[Body], Count(Children.PostId)
FROM
dbo.Post Post,
dbo.Post Children
WHERE
Children.ParentId = Post.PostId
GROUP BY
Post.PostId,
Post.[Body]
Run Code Online (Sandbox Code Playgroud)
您可以在CTE中进行聚合,然后加入到CTE中
WITH Children(Cnt, ParentId)
AS (SELECT COUNT(*),
ParentId
FROM dbo.Post
GROUP BY ParentId)
SELECT P.PostId,
P.[Body],
ISNULL(Cnt, 0) AS Cnt
FROM dbo.Post P
LEFT JOIN Children /*To include childless posts*/
ON Children.ParentId = P.PostId
ORDER BY P.PostId
Run Code Online (Sandbox Code Playgroud)