SQL Server將一列的多行內容拼接成一行的完成辦法。本站提示廣大學習愛好者:(SQL Server將一列的多行內容拼接成一行的完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server將一列的多行內容拼接成一行的完成辦法正文
上面年夜家先看下示例代碼:
示例
昨天碰到一個SQL Server的成績:須要寫一個貯存進程來處置幾個表中的數據,最初成績出在我想將一個表的一個列的多行內容拼接成一行,好比表中有兩列數據 :
種別
稱號
AAA
企業1
AAA
企業2
AAA
企業3
BBB
企業4
BBB
企業5
我想把這個表釀成以下格局:
種別
稱號
AAA
企業1,企業2,企業3
BBB
企業4,企業5
一開端挺頭疼的(會了的確定沒有這類感到,不會那必需是頭疼啊(*^__^*) ),從網上找了點材料,算是找到一種比擬簡略便利的辦法吧,如今年夜體總結一下,供年夜家配合進修。
本來的表名為Table_A,完成代碼以下:
select 種別, 稱號 = ( stuff( (select ',' + 稱號 from Table_A where 種別 = A.種別 for xml path('')), 1, 1, '' ) ) from Table_A as A group by 種別
這裡應用了SQL Server 2005版本今後參加的stuff和for xml path,先說下在下面這句sql中的感化,然後再具體的解釋一下這兩個的用法。
for xml path('')
這句是把獲得的內容以XML的情勢顯示。
stuff((select ',' + ep_name from ep_detail where ep_classes = a.ep_classes for xml path('')), 1, 1, '')
這句是把拼接的內容的第一個“,”去失落
stuff:
1、感化
stuff(param1, startIndex, length, param2)
將param1中自startIndex(SQL中都是從1開端,而非0)起,刪除length個字符,然後用param2調換刪失落的字符。
2、參數
•param1:一個字符數據表達式。param1可所以常量、變量,也能夠是字符列或二進制數據列。
•startIndex:一個整數值,指定刪除和拔出的開端地位。假如 startIndex或 length 為負,則前往空字符串。假如startIndex比param1長,則前往空字符串。startIndex可所以 bigint 類型。
•length:一個整數,指定要刪除的字符數。假如 length 比param1長,則最多刪除到param1 中的最初一個字符。length 可所以 bigint 類型。
•param2,前往類型。假如param1是受支撐的字符數據類型,則前往字符數據。假如param1是一個受支撐的 binary 數據類型,則前往二進制數據。
示例
select STUFF('abcdefg',1,0,'1234') --成果為'1234abcdefg' select STUFF('abcdefg',1,1,'1234') --成果為'1234bcdefg' select STUFF('abcdefg',2,1,'1234') --成果為'a1234cdefg' select STUFF('abcdefg',2,2,'1234') --成果為'a1234defg'
for xml path
for xml path有的人能夠曉得有的人能夠不曉得,其實它就是將查詢成果集以XML情勢展示,有了它我們可以簡化我們的查詢語句完成一些之前能夠須要借助函數活存儲進程來完成的任務。那末以一個實例為主.
假定有個表寄存著先生的選課情形(stu_courses):
接上去我們來看運用FOR XML PATH的查詢成果語句以下:
select stu_name,stu_course from stu_courses for xml path;
成果以下:
由此可以看出 FOR XML PATH 可以將查詢成果依據行輸入成XML各式!