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...