表结构:
create table test(编码 varchar(20),名称 varchar(20))
insert into test values('a1','aaa')
insert into test values('a1','bbb')
insert into test values('a2','ccc')我想查出以下效果:编码 名称
----------------------
a1 aaa,bbb
a2 ccc
语句越简单越好,谢谢。
create table test(编码 varchar(20),名称 varchar(20))
insert into test values('a1','aaa')
insert into test values('a1','bbb')
insert into test values('a2','ccc')我想查出以下效果:编码 名称
----------------------
a1 aaa,bbb
a2 ccc
语句越简单越好,谢谢。
解决方案 »
- 创建触发器问题(改写其他Table)
- 数据库查询
- 获取存储过程参数问题,请高手指点
- sql日志问题
- 请问更改数据库中某表的表名的SQL语句是什么?
- 附加数据库的问题,变成E:\ASPNET\YOUPF\APP_DATA\MEDICINEDATA_DATA.MDF
- C/S结构的软件运行慢,sqlserver2k重启动后就快点,可能的原因有哪些?
- 如何把一张表的记录加到另外一张表中,两张表的字段不同,也就是合并记录,不是追加
- 表单有A、B两个表格控件,各自与A、B数据表绑定,(A、B数据表为一对多关系)如何在B表控件中添加信息并写入B表,但该信息在A表中必须有
- 如何在ADODB 连接对象的连接字符串中使用双引号?
- 游标处理速度非常
- SQL联合查询的问题 求大神解答。
GROUP BY 编码
/*
编码 名称
a1 aaa,bbb
a2 ccc
*/
--*******************************************************************************************
表结构,数据如下:
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) */ drop table tb