SQL Server將一列的多行內容拼接成一行

2021-07-14 10:20:34 字數 1729 閱讀 5010

昨天遇到乙個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, '')
這句是把拼接的內容的第乙個「,」去掉

1、作用

stuff(param1, startindex, length, param2)

將param1中自startindex(sql中都是從1開始,而非0)起,刪除length個字元,然後用param2替換刪掉的字元。

2、引數

示例

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有的人可能知道有的人可能不知道,其實它就是將查詢結果集以xml形式展現,有了它我們可以簡化我們的查詢語句實現一些以前可能需要借助函式活儲存過程來完成的工作。那麼以乙個例項為主.

假設有個表存放著學生的選課情況(stu_courses):

接下來我們來看應用for xml path的查詢結果語句如下:

select stu_name,stu_course from stu_courses for xml path;
結果如下:

由此可以看出 for xml path 可以將查詢結果根據行輸出成xml各式!

SQL Server將一列的多行內容拼接成一行

比如表中有兩列資料 ep classes ep name aaa 企業1 aaa 企業2 aaa 企業3 bbb 企業4 bbb 企業5 我想把這個表變成如下格式 ep classes ep name aaa 企業1,企業2,企業3 bbb 企業4,企業5 一開始挺頭疼的 會了的肯定沒有這種感覺,不...

SQL Server將一列的多行內容拼接成一行

昨天遇到乙個sql server的問題 需要寫乙個儲存過程來處理幾個表中的資料,最後問題出在我想將乙個表的乙個列的多行內容拼接成一行 比如表中有兩列資料 ep classes ep name aaa 企業1 aaa 企業2 aaa 企業3 bbb 企業4 bbb 企業5 我想把這個表變成如下格式 e...

SQL SERVER 字元合併多行為一列

字元合併多行為一列 思路1 行轉列,在與字元拼接 適用每組列數名相同 思路2 轉xml,去掉多餘字元 適用所有 假設興趣表hobbys name hobby 小張打籃球 小張踢足球 name hobby 小張打籃球,踢足球 思路1 注意 此方法只是用分組裡行數內容固定的情況,如學科 語文,英語,數學...