原文:
t-sql行合併成列與列拆分成行
本文出處:
感覺最近sql也沒少寫,突然有一點生疏了,對於用的不是太頻繁的一些操作,時間一久就容易生。
多行的某乙個列合併成乙個列
另外是乙個相反的操作,借助上面合併之後的結果,將乙個多個值的字串列拆分開來,轉換為多行,
用到的字串拆分函式,比較常見
create測試指令碼,沒啥技術含量function
[dbo
].[fn_splitstringtotable](
@svarchar(max
),
@split
varchar(10))
returns
@retable
( id
intidentity(1,1
), value
varchar(100
) )
asbegin
if@s
isnull
return
if@split
isnull
return
if(len(@split)<=0)
begin
insert
into
@revalues (@s
)
return
enddeclare
@splitlen
intset
@splitlen
=len(@split ) -
1while
charindex(@split, @s) >
0begin
insert
@revalues(left(@s, charindex(@split, @s) -1))
set@s
=stuff(@s, 1, charindex(@split, @s) +
@splitlen, ''
)
endinsert
@revalues(@s
)
return
end
createtable
testcolumnmergeandsplit
( id
intidentity(1,1
), businessid
int,
businessvalue
varchar(20))
goinsert
into
testcolumnmergeandsplit
select
1,'aaa
'union
allselect
1,'bbb
'union
allselect
1,'ccc
'union
allselect
2,'***
'union
allselect
2,'yyy
'union
allselect
2,'zzz'go
select
*from
testcolumnmergeandsplit
go--
合併多列為一列
select
t1.businessid,
stuff
( (
select',
'+t2.businessvalue
from
testcolumnmergeandsplit t2
where t2.businessid =
t1.businessid
for xml path(''
) ),
1,1,''
)
ascolstring
from
testcolumnmergeandsplit t1
group
byt1.businessid
goselect
*from
testcolumnmergeandsplit_bak
goselect
t1.businessid,t1.colstring,t2.id,t2.value
from
testcolumnmergeandsplit_bak t1
,')t2
go
T SQL 將一列多行資料合併為一行
sql server在進行資料遷移 和報表處理的時候會遇到將一列多行資料拼接為乙個字串的情況,為了處理這個問題,在網上找了一些相關的資料,提供兩種方法,供遇到類似問題的朋友們參考,也藉此加深自己的印象。table sc student course 張三大學語文 李四大學語文 張三書法鑑賞 張三 欣...
T SQL 將一列多行資料合併為一行
sql server 在進行資料遷移和報表處理的時候遇到將一列多行資料拼接為乙個字串的情形,查詢相關的資料整理如下,提供兩種方法。table sc student course 張三大學語文 李四大學語文 張三書法鑑賞 張三 欣賞 李四電影賞析 期望得到的結果 student course 張三大學...
T SQL 將一列多行資料合併為一行
sql server在進行資料遷移和報表處理的時候會遇到將一列多行資料拼接為乙個字串的情況,為了處理這個問題,在網上找了一些相關的資料,提供兩種方法,供遇到類似問題的朋友們參考,也藉此加深自己的印象。table sc student course 張三大學語文 李四大學語文 張三書法鑑賞 張三 欣賞...