我正在创建一个论坛,所以我创建了一个包含帖子的表格。字段之一是Body类型的with XML。现在,我想创建一个查询,该查询返回所有帖子以及每个帖子的子代数量。我正在使用聚合函数来执行此操作。我在使用汇总函数时需要使用group by。当我使用中的字段时group by,会出现以下异常:
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]
您可以在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