SQL Server2000和2005中合并列值

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋体; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

 

 

有表 tb, 如下:

id    value

—–——

1     aa

1     bb

2     aaa

2     bbb

2     ccc

 

需要得到结果:

id     values

—————–

1      aa, bb

2      aaa, bbb, ccc

 

SQL Server2000 中我们处理的方式一般都是用自定义函数去处理:

举例如下:

 

create function dbo. f_str( @id int )

returns varchar ( 8000)

as

begin

declare @r varchar ( 8000)

set @r= ''

select @r= @r+ ',' + value from tb where id= @id

return stuff ( @r, 1, 1, '' )

end

go

 

select id, values = dbo. f_str( id) from tb group by id

 

SQL Server2005 中,这种统计有了一种新的方法,直接使用语句调用 sql2005 的函数实现:

举例如下:

 

示例数据

DECLARE @t TABLE ( id int , value varchar ( 10))

Insert @t Select 1, 'aa'

UNION ALL Select 1, 'bb'

UNION ALL Select 2, 'aaa'

UNION ALL Select 2, 'bbb'

UNION ALL Select 2, 'ccc'

 

查询处理

Select *

FROM (

Select DISTINCT

id

FROM @t

) A

OUTER APPLY(

Select [values]= STUFF ( REPLACE ( REPLACE (

(

Select value FROM @t N

Where id = A. id

FOR XML AUTO

), '<N value=''' , ',' ), '''/>' , '' ), 1, 1, '' )

) N

 

/*– 结果

id          values

———–—————-

1           aa,bb

2           aaa,bbb,ccc

 

(2 行受影响 )

–*/

 

最近从 CSDN 上又发现了一种方法!

declare @a varchar ( 100)

select @a= coalesce ( @a+ '/' , '' )+ PNAME from HPINF where perid like '207%'

select @a

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值