求SELECT语句,感谢

wxkang123 2009-11-13 03:34:58
我有二个表
A表 DATA VALUE B_ID
200910 a 1
200910 b 2
200909 c 1
200909 d 2
B表 ID NAME
1 一
2 二
我想查出:DATA 一 二
200910 a b
200909 c d

怎么做啊?

...全文
66 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liusong_china 2009-11-13
  • 打赏
  • 举报
回复
16:04:08 scott@TUNGKONG> select * from a;

DATA VAL B_ID
---------- --- ----------
200910 a 1
200910 b 2
200909 c 1
200909 d 2

已用时间: 00: 00: 00.00
16:04:11 scott@TUNGKONG> select * from b;

ID NAME
---------- ----------
1 一
2 二

已用时间: 00: 00: 00.01
16:04:15 scott@TUNGKONG> create or replace procedure pro_test(strName varchar2)
16:04:29 2 as
16:04:29 3 strSQL varchar2(2000);
16:04:29 4 begin
16:04:29 5 strSQL := 'create or replace view ' || strName || ' as select data';
16:04:29 6 for c in (select id,name from B order by 1) loop
16:04:29 7 strSQL := strSQL || ',max(decode(b_id,'|| c.id ||',value)) "' || c.name || '"';
16:04:29 8 end loop;
16:04:29 9 strSQL := strSQL || ' from A group by data';
16:04:29 10 execute immediate strSQL;
16:04:29 11 end;
16:04:29 12 /

过程已创建。

已用时间: 00: 00: 00.01
16:04:30 scott@TUNGKONG> exec pro_test('view_test');

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.00
16:04:38 scott@TUNGKONG> select * from view_test;

DATA 一 二
---------- --- ---
200910 a b
200909 c d

已用时间: 00: 00: 00.01
liusong_china 2009-11-13
  • 打赏
  • 举报
回复
先调用这个过程,exec pro_test('view_test');
其中,参数是你建立的视图名称。
然后直接查询产生的视图,执行select * from view_test;就可以了得到最后的结果了。
liusong_china 2009-11-13
  • 打赏
  • 举报
回复
create or replace procedure pro_test(strName varchar2)
as
strSQL varchar2(2000);
begin
strSQL := 'create or replace view ' || strName || ' as select data';
for c in (select id,name from B order by 1) loop
strSQL := strSQL || ',max(decode(b_id,'|| c.id ||',value)) "' || c.name || '"';
end loop;
strSQL := strSQL || ' from A group by data';
execute immediate strSQL;
end;
/
taiyibingshui 2009-11-13
  • 打赏
  • 举报
回复
顶一下!
liusong_china 2009-11-13
  • 打赏
  • 举报
回复
列名要动态取的话得用动态SQL吧。。。。
liusong_china 2009-11-13
  • 打赏
  • 举报
回复
select data,max(decode(b_id,1,value)) 一,max(decode(b_id,2,value)) 二 from A group by data;

17,378

社区成员

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

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