2011-01-14 14 views
3

我需要幫助對來自SQL Server表中xml數據類型列的元素進行分組和計數。列數據如下所示:
SQL 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

回答

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),並選擇和組從那。

+0

像冠軍一樣工作!我不得不稍微修改它以使用命名空間。謝謝! – brheal 2011-01-14 16:00:14