Oracle, 分组统计问题

Linyufa 2008-04-24 09:24:02
工作中遇到这样一个问题:有没有办法通过一条SQL语句,根据如下原表得到如下查询结果
原始表:
clark, 10
king, 10
james, 10
smith, 20
scott, 20
ford, 30
adams, 30

查询结果
10, clark,king,james
20, smith,scott
30, ford,adams

我试着用SYS_CONNECT_BY_PATH,但好像实现不了。希望高人指点一二。
...全文
1127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fq1798 2011-01-20
  • 打赏
  • 举报
回复
一楼的 我太感谢你了啊
xiangs 2008-04-25
  • 打赏
  • 举报
回复
我的ORACLE版本是9206的,所以没有这个函数可以用:(
Linyufa 2008-04-25
  • 打赏
  • 举报
回复
1楼的提供的方法(WMSYS.WM_CONCAT)果然好用! C'est la Vie, 非常感谢您!
我没说清楚,我说的原表就是oracle自带的那个scott.emp表, 需要按部门分组统计人员,
人员之间用逗号分隔.
fxianxian 2008-04-25
  • 打赏
  • 举报
回复
SQL> with a as (select 'clark' name,10 id from dual
2 union
3 select 'king' name,10 id from dual
4 union
5 select 'james' name,10 id from dual
6 union
7 select 'simth' name,20 id from dual
8 union
9 select 'scott' name,20 id from dual
10 union
11 select 'ford' name,30 id from dual
12 union
13 select 'adams' name,30 id from dual
14 )
15 select id,max(sys_connect_by_path(name,',')) name
16 from (select a.*,row_number()over(partition by id order by id) rn
17 from a)
18 group by id
19 start with rn=1
20 connect by rn-1=prior rn and id=prior id
21 order by id
22 /

ID NAME
---------- --------------------------------------------------------------------------------
10 ,james,king,clark
20 ,simth,scott
30 ,ford,adams
jianghongping 2008-04-25
  • 打赏
  • 举报
回复
select deptno,
max(decode(seq,1,ename,null)) first,
max(decode(seq,2,ename,null)) second,
max(decode(seq,3,ename,null)) third
from ( select deptno,ename, row_number over
(partition by depton order by sal desc nulls last)
seq from emp
)
where seq<=3
group by deptno
hebo2005 2008-04-24
  • 打赏
  • 举报
回复
如果你的原始表是一个a字段clark, 10 ,你想出来的结果为

10, clark,king,james

可以先分拆原来的字段,再用上面的语句,最后合并
select aa.a1||','||WMSYS.WM_CONCAT(a) aaa
(
select substr(a,instr(a,',',1)+1) a1,substr(a,1,instr(a,',',1)-1) a2
from table) aa
group by aa.a1
就能出来你想要的
aaa
10, clark,king,james
20, smith,scott
30, ford,adams
hebo2005 2008-04-24
  • 打赏
  • 举报
回复
用WMSYS.WM_CONCAT
假设你两个字段分别是a,b
select b,WMSYS.WM_CONCAT(a) a
from table
group by b
出来的结果
b a
10 clark,king,james
20 smith,scott
30 ford,adams

17,081

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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