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

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)

Mar*_*ith 5

您可以在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)