A表数据如下:
NO L1 L2 L3 L4 L5
1 A B C D
2 B A D C
3 A D D AB表数据如下:
NO NO2
1 L1+L2+L3(举例,实际不确定)要求A表的L5列内容为
ABC
BAD
ADD但B表的BO2列示不定的,但一定是L1、L2、L3、L4的自由组合(如L1、L3+L4)。各位高手有没有好办法?
NO L1 L2 L3 L4 L5
1 A B C D
2 B A D C
3 A D D AB表数据如下:
NO NO2
1 L1+L2+L3(举例,实际不确定)要求A表的L5列内容为
ABC
BAD
ADD但B表的BO2列示不定的,但一定是L1、L2、L3、L4的自由组合(如L1、L3+L4)。各位高手有没有好办法?
即A表L5列的值是按照B表的NO2字段内容来定的,NO2字段内容是规定了L5的排列数序。
ADC
BCD
AAD 咯? 这样的话 相当于将NO2 对应的几个L1-4 加起来就是L5?
假设NO2字段值是固定的,即L1+L2+L3。
如何将L1+L2+L3,替换为字段名,去求得A.L1||A.L2||A.L3 呢?谢谢您的回复。
c_sql VARCHAR2(2000);
a VARCHAR2(20);
BEGIN
select replace(n2,'+','||') into a from t2;
c_sql := 'SELECT c1,L1,L2,L3,L4,'||a||' from t1';
--DBMS_OUTPUT.PUT_LINE(c_sql);
EXECUTE IMMEDIATE c_sql;
END;
insert into t1 values (1,'A','B','C','D',null);
insert into t1 values (2,'B','A','D','C',null);
insert into t1 values (3,'A','D','D','A',null);create table t2 (n1 number(2),n2 varchar2(10));
insert into t2 values (1,'L1+L2+L3');
commit
CREATE OR REPLACE PROCEDURE p_a IS
c_sql VARCHAR2(2000);
a VARCHAR2(20);
BEGIN
select replace(n2,'+','||') into a from t2;
c_sql := 'update t1 set L5 = (select '||a||' from t1 a where a.c1=t1.c1)';
--DBMS_OUTPUT.PUT_LINE(c_sql);
EXECUTE IMMEDIATE c_sql;
commit;
END;
我可能见的不多,我感觉也就是用动态语句才能处理的这么简单,非常感谢。