SQL查询语句 group by后, 字符串合并
2015-01-22 15:58
453 查看
合并列值 --******************************************************************************************* 表结构,数据如下: id value ----- ------ 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到结果: id values ------ ----------- 1 aa,bb 2 aaa,bbb,ccc 即:group by id, 求 value 的和(字符串相加) 1. 旧的解决方法(在sql server 2000中只能用函数解决。) --============================================================================= create table tb(id int, value varchar(10)) insert into tb values(1, 'aa') insert into tb values(1, 'bb') insert into tb values(2, 'aaa') insert into tb values(2, 'bbb') insert into tb values(2, 'ccc') go --1. 创建处理函数 CREATE FUNCTION dbo.f_strUnite(@id int) RETURNS varchar(8000) AS BEGIN DECLARE @str varchar(8000) SET @str = '' SELECT @str = @str + ',' + value FROM tb WHERE id=@id RETURN STUFF(@str, 1, 1, '') END GO -- 调用函数 SELECt id, value = dbo.f_strUnite(id) FROM tb GROUP BY id drop table tb drop function dbo.f_strUnite go /* id value ----------- ----------- 1 aa,bb 2 aaa,bbb,ccc (所影响的行数为 2 行) */ --=================================================================================== 2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。) create table tb(id int, value varchar(10)) insert into tb values(1, 'aa') insert into tb values(1, 'bb') insert into tb values(2, 'aaa') insert into tb values(2, 'bbb') insert into tb values(2, 'ccc') go -- 查询处理 SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY( SELECT [values]= STUFF(REPLACE(REPLACE( ( SELECT value FROM tb N WHERE id = A.id FOR XML AUTO ), ' <N value="', ','), '"/>', ''), 1, 1, '') )N drop table tb /* id values ----------- ----------- 1 aa,bb 2 aaa,bbb,ccc (2 行受影响) */ --SQL2005中的方法2 create table tb(id int, value varchar(10)) insert into tb values(1, 'aa') insert into tb values(1, 'bb') insert into tb values(2, 'aaa') insert into tb values(2, 'bbb') insert into tb values(2, 'ccc') go select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '') from tb group by id /* id values ----------- -------------------- 1 aa,bb 2 aaa,bbb,ccc (2 row(s) affected) */
demo:
select BeginCity,EndCity,FanDian, [CangWei]=stuff((select '/'+[CangWei] from test1 t where t.BeginCity=Test1.BeginCity and t.EndCity=Test1.EndCity and t.FanDian=Test1.FanDian for xml path('')), 1, 1, '') from Test1 group by BeginCity,EndCity,FanDian
参考: http://bbs.csdn.net/topics/330188225 http://bbs.csdn.net/topics/330182340
相关文章推荐
- SQL查询语句 group by后, 字符串合并
- SQL查询语句 group by后, 字符串合并
- SQL查询语句 group by后, 字符串合并
- 查询含某一字符串的存储过程SQL语句
- SQL查询合并字符串
- Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)
- 存储过程__时间段内查询 以字符串形式输入SQL语句
- SQL语句之查询表合并
- 【SQL精彩语句】分解字符串并查询相关数据
- sql语句查询结果合并union 和union all用法
- sql查询语句_多字段分类汇总_多表合并
- SQL SERVER2000教程-第五章 处理数据 第二十二节 利用UNION对多条SQL查询语句合并生成表
- sql语句查询结果合并union all用法_数据库技巧
- SQL2005 一条语句搞定字符串分割后合并
- sql语句查询结果合并union all用法
- sql语句查询结果合并unionall用法
- GROUP BY在SQL查询语句中的使用
- Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)
- SQL查询合并字符串
- 关于多行合并成一行的SQL查询语句