--
合併多行的某一列值
--stuff:刪除指定的字元,並在指定的起點處插入另一組字元。
create
table
tb (id
int,col1
varchar(10
)) go
insert
tb select1,
'曾祥展
'insert
tb select1,
'學無止境
'insert
tb select1,
'ok'insert
tb select2,
'b'drop
table
tb --
函式create
function
strlink(
@idint
) returns
varchar
(8000
) as
begin
declare
@sql
varchar
(8000
)
set@sql=''
select
@sql
=@sql+'
,'+col1
from
tb whereid=
@idset
@sql
=stuff
(@sql,1
,1,''
) return
@sql
enddrop
function
strlink
select
*from
tb select
col=
dbo.strlink(1)
/*id col1
-----------
1 曾祥展
1 學無止境
1 ok
2 b
col
------------------
曾祥展,學無止境,ok
*/
declare
@temp
table([
col1
]varchar(50
), [
col2
]varchar
(100
))
insert
@temp
select'a
', 'asd
'union
select'a
', 'rdf
'union
select'a
', 'dmg
'union
select'b
', 'kk
'union
select'b
', 'useh'--
第一種方法
selecta.[
col1],
stuff
((select',
'+b.[
col2
]from
@temp
asb
wherea.[
col1]=
b.[col1
]for
xml path(
'')),1,
1,'')
asres
from
@temp
a group
bya.
[col1]--
或者select
distinct
[col1],
[col2]=
substring
(( select',
'+[col2]as
[text()
]from
@temp
t2where
t2.col1
=t1.col1
forxml path(
''), elements
), 2
, 100
)from
@tempt1
--結果:
a asd,dmg,rdf
b kk,useh
廣西壯族自治區,玉林市,玉州區
createindex ix_id on
中國(id)
create
index ix_pid on
中國(pid)
--update dbo.中國 set allname= dbo.getallname(id)
--select dbo.getallname(450902)
create
function getallname (@id
int)
returns
varchar(8000)as
begin
declare
@sql
varchar(8000
)
set@sql=''
;
with t(flag, id, pid, [
name])
as (select
@idas flag, id, pid, [
name
]from
中國 a
where1=
1and a.id=
@idunion
allselect
@idas flag, b.id, b.pid, b.[
name
]from
中國 b
inner
join t c on c.pid=
b.id)
--select * from t where pid !=0
select
@sql
=@sql+'
,'+[
name
]from
twhere id!=
1order
byid
set@sql
=stuff(@sql, 1, 1, ''
)
return
@sql
end
一列多行合併一列一行
方法1 定義臨時的varchar變數,通過游標一條條讀取,然後在迴圈中改變臨時變數的值最終輸出 關於游標的方法,這裡再敘述。sql2008中的方法 create table tb id int,value varchar 10 insert into tb values 1,aa insert in...
一列多行值合併成乙個值
現在有兩張表,一張手機型號表 phonemodel 一張手機製造商表 phonecompany phonemodel表結構如下 phonecompany表結構如下 phonemodel表通過欄位coid與phonecompany表的coid相關聯.現在的需求是如下圖 新增一列查詢models,這列顯...
orcale 多行多列合併為多行一列
使用concat ch1,ch2 函式,但是這個只適用於有兩個引數的。而我的是多張表,不能使用。select concat ch1,ch2 from t sql語句 這樣的效果還是不能達到我們想要的效果,然後我們使用as 將標紅的字段別名更改為我們需要的。select buc.company nam...