如果有表如下:
ID NAME
1 帖子
1 论坛
2 CSDN
2 CNBLOGS
用SQL语句欲得到:
ID NAME
1 帖子,论坛
2 CSDN,CNBLOGS
这样可以的结果,可以吗?
如何实现,望高手指点迷津!
ID NAME
1 帖子
1 论坛
2 CSDN
2 CNBLOGS
用SQL语句欲得到:
ID NAME
1 帖子,论坛
2 CSDN,CNBLOGS
这样可以的结果,可以吗?
如何实现,望高手指点迷津!
解决方案 »
- 大家帮忙看下是怎么一回事!
- 帮忙一下如何取一组的信息集合
- 导入 导出
- 数据库导入了41M多的大概50幅图之后大小MDF文件从80M上涨到了800M?
- SQL查询,求出某字段最近一条记录
- 从来没有碰到过的安装错误,路过的看看
- SQL server2000能否实现财务三栏账??
- 怎样计算一段时间的天数,如2004-3-24和2004-3-27,在这个时间段怎样得到是多少天?
- 我是一个SYBASE寂寞高手,我求求你们,问问我问题吧,真的求你们了。
- 我用的是2012的数据库,可是附加光盘上的2008数库却附加不上,怎么才能附加上去呀
- 大家来看看,为什么我的这个SQL查询运行经常会出现阻塞
- 关于查询分析器中多个数据库执行相同语句,一个报错后中断执行
insert into tb select 1,'帖子'
insert into tb select 1,'论坛'
insert into tb select 2,'CSDN'
insert into tb select 2,'CNBLOGS'
go
select a.id,a.name+','+b.name name from tb a inner join tb b on a.id=b.id and a.name<b.name
go
drop table tb
/*
id name
----------- -----------------------------------------
1 论坛,帖子
2 CNBLOGS,CSDN(2 行受影响)*/
--*******************************************************************************************
表结构,数据如下:
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
insert into tb select 1,'论坛'
insert into tb select 2,'CSDN'
insert into tb select 2,'CNBLOGS'
go
select a.id,a.name+','+b.name name from tb a inner join tb b on a.id=b.id and a.name<b.name
go
drop table tb
/*
id name
----------- -----------------------------------------
2 CNBLOGS,CSDN
结果就成了这样了
而我想得到的是:
id name
----------- -----------------------------------------
1 论坛
2 CNBLOGS,CSDN(1 行受影响)*/