工作中遇到这样一个问题:有没有办法通过一条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,但好像实现不了。希望高人指点一二。
原始表:
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,但好像实现不了。希望高人指点一二。
解决方案 »
- oracle数据库和实例的关系
- 有张表里有800W条数据,在用like模糊查询时非常慢,如果做集群请问会快吗?
- 合并SQL语句
- 用透明网关连接sql server 为什么不好使
- 在linux下oracle最多能够使用多少内存?
- 我为什么每一次装上oracle816后,我的oms怎么才能用呢,需要配置什么和环境变量呢?
- 重命名
- 请问各位哪里有9i下栽,不胜感激
- 如何在Oracle8.1.6中建立数据库?
- win10 12c 安装问题
- 存储过程里输出输入参数是number 的不能指定小数点位数吗,varchar的也不能指定长度吗?
- vc调 存储过程 多个blob,其中一个empty_blob() 的问题,急啊
假设你两个字段分别是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
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
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
我没说清楚,我说的原表就是oracle自带的那个scott.emp表, 需要按部门分组统计人员,
人员之间用逗号分隔.
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