我有二个表
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 怎么做啊?
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 怎么做啊?
解决方案 »
- 【寻助】如何能够像查看sql server数据库主控根目录,而查看Oracle的主控根目录。
- 关于oracle update带参数存储过程问题,请帮忙解决!
- 没有主键的表,如何删除里面重复的数据?求助SQL?(续)
- oracle客户端怎样能实现执行服务器端的存储过程等?
- Oracle中加:号的变量怎么声明?和其它变量有啥区别?
- [求助]新人创建用户问题.
- 存储过程里动态生成试图
- 查询当前user下表的记录数
- SQL> insrt into disconnect_cause values('10','正常结束');
- Oracle11g的SQLDeveloper卡顿现象
- 请问有没有使用pl/sql developer的朋友知道为什么触发器无法右键"新建"?
- 求一个Oracle查count的语句
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;
/
其中,参数是你建立的视图名称。
然后直接查询产生的视图,执行select * from view_test;就可以了得到最后的结果了。
---------- --- ----------
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