需求: 現有一表,如圖所示:
要求,將表中的資料按如下格式顯示出來:
/*結果
1 張三 a
2 張三 b
3 張三 c
4 張三 d
5 張三 e
2 李四 a
2 李四 b
2 李四 c
*/這個問題是在csdn上找到的,當時,也很鬱悶,不過其中有乙個牛人用了四種方法寫出來了,所以做個筆記。
create如有好的方法,請大牛繼續貼留到恢復貼上。table tb(id int,[
name
]varchar(60),value varchar(30
))insert
into tb values(1,'
張三','
a,b,c,d,e')
insert
into tb values(2,'
李四','
a,b,c')
go--
1.使用臨時表
select
top100 id =
identity(int, 1, 1) into #tb from
syscolumns a, syscolumns b
select b.id,a.[
name
], [
value]=
substring(a.[
value
], b.id, charindex('
,', a.[
value]+
',', b.id) -
b.id)
from[tb
]a, #tb b
where
substring(','
+ a.[
value
], b.id, 1) =',
'groupby[
value
],[name
],b.id
--2.不使用臨時表
select a.id ,a.[
name
], value =
substring(a.value , b.number , charindex('
,' , a.value +',
' , b.number) - b.number
) from tb a join
master..spt_values b
on b.type='p
'and b.number
between
1and
len(a.value)
where
substring(','
+ a.value , b.number , 1) =',
'--3.使用xml
select a.id,a.[
name
], b.value from
select id,[
name],
[value]=
convert(xml,''+
replace([
value
], '
,', '
') +''
)
from
tb) a
outer
(
select
[value
]= n.v.value('
.', '
varchar(100)')
from a.[
value
].nodes('
/root/v
') n(v)
) b--
4.使用cet
;with tt as
(
select id,[
name],
[value]=
cast(left([
value
],charindex('
,',[
value]+
',')-1) as
nvarchar(100
)), split
=cast(stuff([
value]+
',',1,charindex('
,',[
value]+
','),'') as
nvarchar(100
))
from
tbunion
allselect id,[
name],
[value]=
cast(left(split,charindex('
,',split)-
1) as
nvarchar(100
)), split
=cast(stuff(split,1,charindex('
,',split),'') as
nvarchar(100
))
from tt where split>'')
select id,[
name
],[value
]from tt order
by id option (maxrecursion 0)
拆分字串
拆分乙個字串,獲取每一組的key與value。如字串 qq adf f qewr98 eer d9adf t ad34 f qewrqr u adf43 gggg 2344 按照物件導向理念來解決,建立乙個物件 這個是對物件物件,有key和value兩個特性。我們需要把拆分好的資料臨時儲存起來,現在...
拆分字串
本函式可以將 目標字串 以 指定字串 進行拆分,並通過表結構返回結果。如下 create or replace type str split is table of varchar2 4000 create or replace function splitstr p string in varch...
拆分字串
拆分乙個字串,獲取每一組的key與value。如字串 qq adf f qewr98 eer d9adf t ad34 f qewrqr u adf43 gggg 2344 按照物件導向理念來解決,建立乙個物件 這個是對物件物件,有key和value兩個特性。我們需要把拆分好的資料臨時儲存起來,現在...