合併多行的某一列值

2021-09-22 06:36:30 字數 3200 閱讀 1268

--

合併多行的某一列值

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

廣西壯族自治區,玉林市,玉州區

create

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