SQL 將一列多行數據合併爲一行

原表數據:sql

指望結果:express

使用STUFF + FOR XML PATH便可實現以上效果

執行如下SQL:函數

SELECT DISTINCT Name, STUFF((SELECT ',' + Course FROM Student WHERE Name = T.Name FOR XML PATH('')), 1, 1, '') AS Course FROM Student AS T

 能夠看到輸出結果與指望結果相同:spa

 

STUFF語法

STUFF ( character_expression , start , length , replaceWith_expression )  

參數

character_expression
字符數據的表達式。 character_expression 能夠是常量、變量,也能夠是字符列或二進制數據列。
code

start
一個整數值,指定刪除和插入的開始位置。 若是 start 爲負或爲零,則返回空字符串。 若是 start 的長度大於第一個 character_expression,則返回空字符串。 start 的類型能夠是 bigint。
server

length
一個整數,指定要刪除的字符數。 若是 length 爲負,則返回空字符串。 若是 length 的長度大於第一個 character_expression,則最多能夠刪除到最後一個 character_expression 中的最後一個字符。 若是 length 爲零,則在字符串中第一個字符以前插入內容。 length 的類型能夠是 bigint。
blog

replaceWith_expression
字符數據的表達式。 character_expression 能夠是常量、變量,也能夠是字符列或二進制數據列。 此表達式從 start 開始替換 length 個字符的 character_expression。 若是 replaceWith_expression 爲 NULL,則在不插入任何內容的狀況下刪除字符。
element

 

FOR XML PATH

其實FOR XML PATH就是將查詢結果集以XML形式展示,有了它咱們能夠簡化查詢語句以實現一些之前須要藉助函數活存儲過程才能完成的工做。以上面的表格爲例,執行如下SQL:字符串

SELECT * FROM Student FOR XML PATH

結果以下:get

執行如下SQL:

SELECT * FROM Student FOR XML PATH('')

結果以下:

由此能夠看出 FOR XML PATH 能夠將查詢結果根據行輸出成XML格式。

相關文章
相關標籤/搜索