首页 新闻 会员 周边

sql server 统计

1
悬赏园豆:5 [已解决问题] 解决于 2010-12-29 12:41

ID     BODY

1       aaaa

2       bbbb

1      cccccc

3     ddddd

 

这样的数据

我要获取成

ID     BODY

1      aaaa,ccccc

2     bbbb

3     ddddd

这样的,请高手说说思路和方法!

盗贼的主页 盗贼 | 菜鸟二级 | 园豆:255
提问于:2010-12-22 17:16
< >
分享
最佳答案
0
select distinct ID,STUFF((select ',' + body
from [追索]
where ID=a.ID
for xml path('')),1,1,'') as body
from [追索] a

 

 刚随手写的 忘了加","号这下可以了

收获园豆:5
追索 | 小虾三级 |园豆:625 | 2010-12-22 17:27
关键字 'for' 附近有语法错误。
盗贼 | 园豆:255 (菜鸟二级) | 2010-12-22 17:34
--1、sql2000中只能用自定义的函数解决 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 create function dbo.f_str(@id varchar(10)) returns varchar(1000) as begin declare @str varchar(1000) select @str = isnull(@str + ',' , '') + cast(value as varchar) from tb where id = @id return @str end go --调用函数 select id , value = dbo.f_str(id) from tb group by id drop function dbo.f_str drop table tb --2、sql2005中的方法 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, [value] = stuff((select ',' + [value] from tb t where id = tb.id for xml path('')) , 1 , 1 , '') from tb group by id drop table tb
盗贼 | 园豆:255 (菜鸟二级) | 2010-12-29 12:42
其他回答(2)
0
追索兄弟是对的,受教了。以下代码经过我检验是对的。

select distinct ID,STUFF((
select ','+BODY
from 【youtablename】
where ID=1
for xml path('')
),
1,1,'')
as BODY
FROM 【youtablename】 a
流水殇 | 园豆:404 (菜鸟二级) | 2010-12-22 22:26
没有从根本上解决问题...将表转换成xml时,里面写死了(where ID=1)
支持(0) 反对(0) like%'远远'% | 园豆:635 (小虾三级) | 2010-12-23 11:00
你好,这我也看到了,昨天晚上要走了,就没有检查,现在我正在写这道题的解题思路,等会写上来吧
支持(0) 反对(0) 流水殇 | 园豆:404 (菜鸟二级) | 2010-12-23 11:02
--把ID=1 改成 ID=a.ID --具体思路是这样的: SELECT ','+BODY FROM body WHERE ID=a.ID FOR xml path('') --这条语句的作用是按照a中的ID查找body表中ID=a.ID的所有记录,并把它转换成一个xml(关于将查询集转换成xml的文章, --博客园有很多的,你可以去看看) stuff((SELECT ','+BODY FROM body WHERE ID=a.ID FOR xml path('')),1,1,'') --这条语句的作用是把生成的xml前面的一个逗号去掉并转化成标量值 --最后用一个distinct去掉重复的记录
支持(0) 反对(0) 流水殇 | 园豆:404 (菜鸟二级) | 2010-12-23 11:09
select distinct _id ,(case when _id =(select distinct _id from Test_10 where _id=a._ID) then _name end) as '_name' from Test_10 a 我写的这个还有点问题就是then _name end,其中_name 还没想到如何解决,你能看看如果不转换xml的话,那该如何写?
支持(0) 反对(0) like%'远远'% | 园豆:635 (小虾三级) | 2010-12-23 11:22
0

select distinct _id ,(case when _id =(select distinct _id from Test_10 where _id=a._ID) then (select distinct case _id when 1 then 'aaaa,cccc' else _name end from Test_10 where _id=a._id) end) as '_name' from Test_10 a

写的有点牵强...经过测试 没问题(写的有点牵强的地方在于:when 1 then 'aaaa,cccc')

like%'远远'% | 园豆:635 (小虾三级) | 2010-12-23 11:48
如果我有ID为10的记录,那你还得判断啊
支持(0) 反对(0) 流水殇 | 园豆:404 (菜鸟二级) | 2010-12-23 14:17
我写了一个不用xml转化,采用游标实现,具体请看我的博客: http://www.cnblogs.com/yuananyun/archive/2010/12/23/1914811.html
支持(0) 反对(0) 流水殇 | 园豆:404 (菜鸟二级) | 2010-12-23 14:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册