请教sql语句

2000lhzh 2006-09-25 09:09:39
原来表结构:

单号 编号 数量
HDBR20030311015 430461E411-C021 10
HDBR20030311015 430471E411-C021 20
HDBR20030311015 432067J100-C021 30
HDBR20030311016 432067J100-C022 100
HDBR20030311016 430471E411-C022 100

如何得到以下的结果:
单号 编号1 编号2 编号3 数量1 数量2 数量3
HDBR20030311015 430461E411-C021 430471E411-C021 432067J100-C021 10 20 30
HDBR20030311016 432067J100-C022 430471E411-C022 100 100

要求有1个单号对应多个编号时,有多少个要在一行中列出多少个。
...全文
146 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
2000lhzh 2006-09-27
  • 打赏
  • 举报
回复
楼上的方法,只能在结果中显示两列,
我想得到有 如果最多有N 个 编号 应该有1 + N个编号+ N个数量。总共是2N+1 列。
这个好实现吗?
Eric_1999 2006-09-25
  • 打赏
  • 举报
回复
FYI

CREATE OR REPLACE FUNCTION get_c2(empid NUMBER)
RETURN VARCHAR2
IS
Col_c2 VARCHAR2(4000);
BEGIN
FOR cur IN (SELECT code FROM empcode WHERE id = empid) LOOP
Col_c2 := Col_c2|| ',' || cur.code;
END LOOP;
Col_c2 := rtrim(Col_c2,1);
RETURN Col_c2;
END;
/


CREATE OR REPLACE FUNCTION get_c3(empid NUMBER)
RETURN VARCHAR2
IS
Col_c2 VARCHAR2(4000);
BEGIN
FOR cur IN (SELECT r.rolename FROM emprole er, role r WHERE er.roleid = r.roleid(+) and er.id = empid) LOOP
Col_c2 := Col_c2|| ',' || cur.code;
END LOOP;
Col_c2 := rtrim(Col_c2,1);
RETURN Col_c2;
END;
/

运行sql的到结果:
select e.empid, e.name, e.age, get_c2(code) code, get_c3(rolename) rolename
from employee e, empcode ec, emprole er, role r
where e.empid(+) = ec.empid and e.empid(+) = er.empid and er.roleid = r.roleid(+)
group by e.empid

17,382

社区成员

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

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