可以用Decode函数啊,如果表一中c2的取值固定的话,比较简单了如果不固定,则通过写存储过程,写动态的SQL语句包含(decode),返回记录集当然还有其他的办法,比如利用临时表,把数据写到临时表,再查询临时表
解决方案 »
- 行转列的时候怎么过滤掉重复字段值?row_number() over partition by
- 急救oracle数据如何回复
- 问个oracle数据字典方面的问题!谢谢!
- ERwin怎么连接oralce
- 关于toad修改数据库的问题
- 通过dmp文件,来重新建一个数据库的问题(100分)
- 请高手帮我解决个问题,快撑不下去了(100)分
- 插入数据的时候能不能系统建立表.....
- 急!!!高分求解!!!IMP-00016: 不支持要求的字符集转换(从类型850到852)问题!
- ORA-01735: 无效的 ALTER TABLE 选项(Oracle SQL )
- 关于看表名的问题
- "无法更改此触发器类型的 NEW 值"是怎么回事?
最清晰的解法:
存储过程法:
定义n个变量va,vb,vc...;
定义一个变量存储中间标志flag boolean;
declare 一个CURSOR cur_1 for slect unique c3 from t_1;
for i in cur_1
begin
select i into va from dual where exist (select c2 from t_1 where c3=i) and c2='a';
select i into vb from dual where exist (select c2 from t_1 where c3=i) and c2='b';
select i into vc from dual where exist (select c2 from t_1 where c3=i) and c2='c';
...
insert into t_2 values(va,vb,vc...);
end
end
/
以上只是思想,没有在机器上试过,程序需要仔细调试。
我估计用一条SQL也可以实现,但难度较大,而且较繁,需要实际测试过,我周一要出差了,可能没空写了。
declare 一个CURSOR cur_1 for slect unique c3 from t_1;
for i in cur_1
begin
select i into va from dual where exist (select c2 from t_1 where c3=i and c2='a');
select i into vb from dual where exist (select c2 from t_1 where c3=i and c2='b');
select i into vc from dual where exist (select c2 from t_1 where c3=i and c2='c');
...--可能va,vb,vc...用数组会显得简洁一些
insert into t_2 values(va,vb,vc...);
end
end
/
I have seen a lot of simular question like yours . Bascially you should not consider use only one sql
那么,由外部程序动态构造出一个SQL是否可以完成?
或者使用一个存储过程完成也可以,只要不使用临时表。
能不能换个思路
我总觉得这好像已经超出rdbms的基本范畴了