起火啦,快来救命呀

chenguoli 2003-06-05 10:49:39
有三张表,结构如下:
SQL> desc cust_total_tmp;
Name Type Nullable Default Comments
------------ ------------ -------- ------- --------
LATN_NAME VARCHAR2(30) Y
REGION_NAME VARCHAR2(30) Y
CHANNEL_NAME VARCHAR2(30) Y
CUST_NUM NUMBER(10) Y
SERV_NUM NUMBER(10) Y
ACCT_NUM NUMBER(10) Y
REGION_ID NUMBER(10) Y

SQL> desc region_staff;
Name Type Nullable Default Comments
--------- ---------- -------- ------- --------
STAFF_ID NUMBER(10) 员工序号
REGION_ID NUMBER(10) 社区序号
TITLE_J CHAR(3) Y 职务J

SQL> desc staff;
Name Type Nullable Default Comments
---------- ------------ -------- ------- ----------
STAFF_ID NUMBER(10) 员工序号
ADDRESS VARCHAR2(80) Y 地址
E_MAIL VARCHAR2(20) Y 电子邮件
STAFF_NAME VARCHAR2(30) Y 员工名称
PASSWD VARCHAR2(15) Y 密码
STAFF_CODE VARCHAR2(15) 用户名
STATE_G CHAR(3) Y 状态G
MOBILE VARCHAR2(16) Y 手机号码
TELE_NO VARCHAR2(16) Y 电话号码
PAS_NO VARCHAR2(16) Y 小灵通号码

现提供 cust_total_tmp.REGION_ID,预据此得到 staff.STAFF_NAME
即由 cust_total_tmp.REGION_ID 关联到 region_staff.STAFF_ID,再由 STAFF_ID 关联出 staff.STAFF_NAME
其中,一个REGION_NAME对应一个REGION_ID,一个STAFF_ID对应到一个STAFF_NAME,但是一个REGION_ID可以对应多个STAFF_ID(由region_staff.TITLE_J进行区分),
或者没有对应的STAFF_ID,预得表现结果如下:

REGION_NAME STAFF_NAME
XXXX区 张三
或:
REGION_NAME STAFF_NAME
XXXX区 张三/李四
或:
REGION_NAME STAFF_NAME
XXXX区 无


即:不论一个REGION_ID对应多少STAFF_ID(或者没有),只能在查询结果中显示一条记录。
可以在得到的STAFF_NAME中任取一个,或者将几个STAFF_NAME用"+"或"/"连接起来。
...全文
52 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
LGQDUCKY 2003-06-12
  • 打赏
  • 举报
回复
建议写给小过程好点
beckhambobo 2003-06-11
  • 打赏
  • 举报
回复
请楼主同一贴就不要发行两次.

create or replace function get_name(p_id in varchar2) return varchar2 is
Result varchar2(100);
cursor c1_sor is
select STAFF_ID from cust_total_tmp where REGION_ID=p_id;
cursor c2_sor(pid varchar2) is
select STAFF_NAME from staff where STAFF_ID=pid;
v_count Number;
begin
v_count:=0;
Result:='';
for v1_sor in c1_sor loop
for v2_sor in c2_sor(v1_sor.STAFF_ID) loop
if v_count=0 then
Result:=v2_sor.STAFF_NAME;
v_count:=v_count+1;
else
Result:=Result||'/'||v2_sor.STAFF_NAME;
end if;
end loop;
end loop;
return(Result);
end get_name;
/

select REGION_NAME,get_name(REGION_ID) STAFF_NAME from cust_total_tmp;
black_snail 2003-06-11
  • 打赏
  • 举报
回复
用一个SQL太难,写个很小的STORED PROCEDURE 可以解决问题

光说不练之龙飞虎

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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