Oracle 多表SQL语句

chengccy 2012-06-28 06:05:01
Table A:

name ----- elective

张三 00010204
李四 010203

...

Table B:

value ---- id ----- name

elective 00 数学

elective 01 语文

elective 02 英语

elective 03 C语言

elective 04 Oracle

....

怎么用一个简单一点的SQL语句实现下面的样子

name ---- elective

张三 数学,语文,英语,Oracle
李四 语文,英语,C语言
...全文
179 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
singzero 2012-06-30
  • 打赏
  • 举报
回复
oracle 提供了新的聚集函数 listagg()
zll793027848 2012-06-30
  • 打赏
  • 举报
回复
直接用取串函数substr(),再用所取串跟B表id的相等后,联接取出B表的name字段不就好了。
chengccy 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code
没环境没调试,可以试试以下指令:
大致思路:
先换成这种形式
张三 00 数学
张三 01 语文
张三 02 英语
张三 04 Oracle
再以人名分组,利用wm_concat()函数

select sname,wm_concat(cname) from
(select a.name sname,b.id,b.name cname form tableA a lef……
[/Quote]
用like的话,elective的ID超过10个就会出问题了
如031014,应该是 03,10,14 like 一下就出问题了
小德 2012-06-29
  • 打赏
  • 举报
回复
看来一条SQL难哦,要不然就先把A表的elective处理了。
小德 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 1 楼 的回复:

SQL code
没环境没调试,可以试试以下指令:
大致思路:
先换成这种形式
张三 00 数学
张三 01 语文
张三 02 英语
张三 04 Oracle
再以人名分组,利用wm_concat()函数

select sname,wm_concat(cname) from
(select a.name sname,b.id,b.name ……
[/Quote]
这下OK了,但是你的ID必须是两位长度喔...
WITH t1 AS(
SELECT 'zhang san' SNAME,'00010204' elective FROM dual
UNION ALL
SELECT 'li si','010203' FROM dual
),t2 AS (
SELECT 'elective' Value,'00' id,'shu xue' cname FROM dual
UNION ALL
SELECT 'elective','01','xu wen' FROM dual
UNION ALL
SELECT 'elective','02','ying yu' FROM dual
UNION ALL
SELECT 'elective','03','C yu yan' FROM dual
UNION ALL
SELECT 'elective','04','Oracle' FROM dual
UNION ALL
SELECT 'elective','10','JAVA' FROM dual
)

select sname,wm_concat(cname) from
(
select a.sname,b.id,b.cname cname from t1 a left join t2 b on
a.elective like '%'||b.id||'%' AND Mod(InStr(a.elective,b.id)-1,2)=0
)group by sname;
zzm1025123456 2012-06-28
  • 打赏
  • 举报
回复
还没用过的函数wm_concat()~~~学习学习
cupid0327 2012-06-28
  • 打赏
  • 举报
回复
不错,学习了
小德 2012-06-28
  • 打赏
  • 举报
回复
没环境没调试,可以试试以下指令:
大致思路:
先换成这种形式
张三 00 数学
张三 01 语文
张三 02 英语
张三 04 Oracle
再以人名分组,利用wm_concat()函数

select sname,wm_concat(cname) from
(select a.name sname,b.id,b.name cname form tableA a left join tableB b on
a.elective like '%'||b.id||'%'
)group by sname;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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