一尘不染

如何在GROUP BY子句中添加XML数据类型?

sql

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

阅读 176

收藏
2021-03-08

共1个答案

一尘不染

您可以在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
2021-03-08