sql分组将一列值转换为一个字段,用逗号分隔

投币手 2013-06-27 03:24:57
在线等~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
表结构和数据如下:
NAME ROWNO ORGID
a 1 1
b 2 1
c 3 1
asdf 1 2
12334 1 3
---------------------
转换后的结果如下:
NAME ROWNO ORGID
a,b,c 1 1
asdf 1 2
12334 1 3

即,orgId相同的行,将其name拼装成一个字段,用逗号分开; rowNo是无关紧要的字段,可以考虑也可以不考虑。

怎么将结果写出来,不要用函数,也不用存储过程,而且这张表的数据是动态的,并不一定就是这几行。
求大神降下天书一卷,解小弟困惑。
注:数据库为DB2
...全文
1166 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
投币手 2013-06-27
  • 打赏
  • 举报
回复
引用 7 楼 maco_wang 的回复:
[quote=引用 6 楼 toubishou 的回复:] [quote=引用 3 楼 maco_wang 的回复:] 参考; ORACLE和DB2数据库GROUP BY条件下合并行记录
头像很漂亮! 这种写法我试过,因为是在自己开发的一个数据库平台上进行查询,所以不支持xmlAgg这些函数。[/quote] 不支持就不好弄了,我对DB2不了解,我看到的都是这种; http://www.2cto.com/database/201212/177065.html[/quote] 问题是我用的数据库不支持xml,所以才纠结啊!
投币手 2013-06-27
  • 打赏
  • 举报
回复
select a.orgId,a.rowNo
,case when b.rowNo > 1 then a.name ||',' || b.name
			else a.name end name
from temp_zengcc a
,temp_zengcc b
where a.orgId = b.orgId
and a.name <> b.name
and a.rowNo <> b.rowNo
这是我写的sql,但是只支持orgId相同的记录数不超过2条的情况,超过2条就不行了,能不能帮我改进一下这个方法,能够满足orgId相同的记录数大于3的情况。
叶子 2013-06-27
  • 打赏
  • 举报
回复
引用 6 楼 toubishou 的回复:
[quote=引用 3 楼 maco_wang 的回复:] 参考; ORACLE和DB2数据库GROUP BY条件下合并行记录
头像很漂亮! 这种写法我试过,因为是在自己开发的一个数据库平台上进行查询,所以不支持xmlAgg这些函数。[/quote] 不支持就不好弄了,我对DB2不了解,我看到的都是这种; http://www.2cto.com/database/201212/177065.html
投币手 2013-06-27
  • 打赏
  • 举报
回复
引用 3 楼 maco_wang 的回复:
参考; ORACLE和DB2数据库GROUP BY条件下合并行记录
头像很漂亮! 这种写法我试过,因为是在自己开发的一个数据库平台上进行查询,所以不支持xmlAgg这些函数。
投币手 2013-06-27
  • 打赏
  • 举报
回复
引用 2 楼 stublue 的回复:

 --select 'a' NAME, 1 ROWNO, 1 ORGID
 --into #t
 --union all select 'b', 2 ,1
 --union all select 'c', 3 ,1
 --union all select 'asdf', 1 ,2
 --union all select '12334', 1 ,3

select stuff(
(select ','+name 
 from #t b 
 where a.ORGID=b.ORGID for xml path(''))
 ,1
 ,1
 ,'') as NAME
 ,min(ROWNO) as ROWNO
 ,ORGID
 from #t a
 group by ORGID
这是sql server的写法,db不知道有没有类似的
这个我有试过,但是不能用for xml path(''),因为是在自己写的一个编辑器中使用,不支持这种写法。
投币手 2013-06-27
  • 打赏
  • 举报
回复
引用 1 楼 u011221047 的回复:
select ORGID,wm_concat(NAME) from tlb group by ORGID oracle写法
谢谢了,但是这个在DB2数据库中不行。
叶子 2013-06-27
  • 打赏
  • 举报
回复
Leon_He2014 2013-06-27
  • 打赏
  • 举报
回复

 --select 'a' NAME, 1 ROWNO, 1 ORGID
 --into #t
 --union all select 'b', 2 ,1
 --union all select 'c', 3 ,1
 --union all select 'asdf', 1 ,2
 --union all select '12334', 1 ,3

select stuff(
(select ','+name 
 from #t b 
 where a.ORGID=b.ORGID for xml path(''))
 ,1
 ,1
 ,'') as NAME
 ,min(ROWNO) as ROWNO
 ,ORGID
 from #t a
 group by ORGID
这是sql server的写法,db不知道有没有类似的
阿玛伽 2013-06-27
  • 打赏
  • 举报
回复
select ORGID,wm_concat(NAME) from tlb group by ORGID oracle写法

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧