SQL Server同列字符串相加

来源:互联网 发布:三峡大学教务网络系统 编辑:程序博客网 时间:2024/05/01 05:18

有一张表test,数据如下:

column2 column1

3  43243
2  erew
1  gg
1  kk
1  jj
1  hh

这时我需要查询test中所有column2相等的column1列的字符相加的值。

既这样的结果:

3  43243
2  erew
1  gg,kk,jj,hh

sql语句该怎么写?

先来看看几个函数

1.stuff(str1,start,length,str2)

这个函数的含义是:往str1字符串里插入str2字符串,从start位置开始插入,同时从start位置开始,删掉str1中length个字符,这个start的值不能超过str1的长度范围,否则stuff函数返回null。

SELECT STUFF('abc', 1, 2, 'xyz')

结果:

xyzc

2.ltrim(str),rtrim(str)

这两个函数简单,ltrim去掉字符str的左边空格,rtrim去掉字符str的右边空格。

3.for xml path(str)

把查询的数据生成XML数据.

拿上面的test表为例:

select column1 from test where column2=1 for xml path

结果

gg

kk

jj

hh

如果给path加个参数

select column1 from test where column2=1 for xml path('root')

结果

gg

kk

jj

hh


如果把path的参数改为空字符

select column1 from test where column2=1 for xml path('')

结果

gg

kk

jj

hh

如果查询时不写列名会怎样?

select column2+'' from test where column2=1 for xml path('')

结果

ggkkjjhh

现在可以可以处理开始的问题了

select distinct column2,stuff((select ','+ltrim(column1)  from test where column2=b.column2
for xml path('')),1,1,'') from test b

查询结果就是开始的那个结果。

原创粉丝点击