我需要帮助对SQL Server表中的xml数据类型列中的元素进行分组和计数。列数据如下所示:
<Books count="6">
<Book id="1">
<Category>A</Category>
</Book>
<Book id="2">
<Category>B</Category>
</Book>
<Book id="3">
<Category>B</Category>
</Book>
<Book id="4">
<Category>B</Category>
</Book>
<Book id="5">
<Category>C</Category>
</Book>
<Book id="6">
<Category>C</Category>
</Book>
</Books>
输出如下所示:
Category Count
A 1
B 3
C 2
我已经弄清楚如何获取每一行的类别,但它们都像这样粘在一起:
ABBBCC
答案 0 :(得分:1)
您可以尝试这样的事情:
DECLARE @Input XML
SET @Input = '<Books count="6">
<Book id="1">
<Category>A</Category>
</Book>
<Book id="2">
<Category>B</Category>
</Book>
<Book id="3">
<Category>B</Category>
</Book>
<Book id="4">
<Category>B</Category>
</Book>
<Book id="5">
<Category>C</Category>
</Book>
<Book id="6">
<Category>C</Category>
</Book>
</Books>'
;WITH CatValues AS
(
SELECT
B.value('(Category)[1]', 'varchar(50)') 'Category'
FROM
@Input.nodes('/Books/Book') as B(B)
)
SELECT
Category, COUNT(*)
FROM
CatValues
GROUP BY
Category
由于像B.value('(Category)[1]', 'varchar(50)')
这样的XML操作不能直接成为GROUP BY
子句的一部分,因此我们的想法是坚持使用代码将XML中的Category
抓取到公用表表达式中(CTE)并从中选择和分组。