sql 字符串相加(stuff)

有一张表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=1for xml path

结果

row

column1gg/column1

/row

row

column1kk/column1

/row

row

column1jj/column1

/row

row

column1hh/column1

/row

如果给path加个参数

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

结果

root

column1gg/column1

/root

root

column1kk/column1

/root

root

column1jj/column1

/root

root

column1hh/column1

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

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

结果

column1gg/column1

column1kk/column1

column1jj/column1

column1hh/column1

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

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

结果

ggkkjjhh

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

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

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

posted @ 2012-04-20 11:55  面朝黄土背朝天  阅读(2688)  评论(0)    收藏  举报