T SQL 將一列多行資料合併為一行

2021-06-25 17:05:49 字數 1647 閱讀 5550

sql server在進行資料遷移

和報表處理的時候會遇到將一列多行資料拼接為乙個字串的情況,為了處理這個問題,在網上找了一些相關的資料,提供兩種方法,供遇到類似問題的朋友們參考,也藉此加深自己的印象。

table:sc

student

course

張三大學語文

李四大學語文

張三書法鑑賞

張三**欣賞

李四電影賞析

期望得到的結果:

student

course

張三大學語文,書法鑑賞,**欣賞

李四大學語文,電影賞析

if object_id(n'sc') is not null

begin

drop table sc

endelse

begin

create table sc

(student nvarchar(50),

course nvarchar(50)

)insert into sc

select n'張三',n'大學語文' union all

select n'李四',n'大學語文' union all

select n'張三',n'書法鑑賞' union all

select n'張三',n'**賞析' union all

select n'李四',n'電影賞析'

endgo (5 row(s) affected)

s

方法一:使用者自定義函式(如果是雙主鍵時會有問題,需要傳兩個主建引數進去。比方說班級,小組,人員這三個主建,不能通過只傳班級id進去然後按小級分級,而需要傳班級與小組這兩個主建做為引數然後作為條件查詢。暫沒想到解決方法)

create function fn_merge (@student nvarchar(50))

returns nvarchar(50) as

begin

declare @course nvarchar(50)

select @course = isnull(@course + ',','') + @course

from sc

where student = @student

return @course

endselect distinct [student]

,dbo.fn_merge([student]) as course

from [dbo].[sc]

結果:(2 row(s) affected)

方法二:for xml path (sql2005以上版本可以用,sql2000的請用方法一)

select  distinct [student]

,stuff(

(select ','+[course]

from [dbo].[sc]

where student = a.student

for xml path('')

),1,1,''

)as course

from [dbo].[sc] as a

結果:(2 row(s) affected)

**:

T SQL 將一列多行資料合併為一行

sql server 在進行資料遷移和報表處理的時候遇到將一列多行資料拼接為乙個字串的情形,查詢相關的資料整理如下,提供兩種方法。table sc student course 張三大學語文 李四大學語文 張三書法鑑賞 張三 欣賞 李四電影賞析 期望得到的結果 student course 張三大學...

T SQL 將一列多行資料合併為一行

sql server在進行資料遷移和報表處理的時候會遇到將一列多行資料拼接為乙個字串的情況,為了處理這個問題,在網上找了一些相關的資料,提供兩種方法,供遇到類似問題的朋友們參考,也藉此加深自己的印象。table sc student course 張三大學語文 李四大學語文 張三書法鑑賞 張三 欣賞...

orcale 多行多列合併為多行一列

使用concat ch1,ch2 函式,但是這個只適用於有兩個引數的。而我的是多張表,不能使用。select concat ch1,ch2 from t sql語句 這樣的效果還是不能達到我們想要的效果,然後我們使用as 將標紅的字段別名更改為我們需要的。select buc.company nam...