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)。各位高手有没有好办法?

解决方案 »

  1.   

    即A表L5列的值是按照B表的NO2字段内容来定的。
      

  2.   

    不是,
    即A表L5列的值是按照B表的NO2字段内容来定的,NO2字段内容是规定了L5的排列数序。
      

  3.   

    貌似有点模糊 如果NO2 是L1+L4+L3那L5就是
    ADC
    BCD
    AAD 咯? 这样的话 相当于将NO2 对应的几个L1-4 加起来就是L5?
      

  4.   

    这样的话  那要用存储了  将NO2值中的+替换成||作为字段名 来查询表A 获得L5
      

  5.   

    将NO2值中的+替换成||作为字段名!对,就是这样,不过怎么实现呢?
    假设NO2字段值是固定的,即L1+L2+L3。
    如何将L1+L2+L3,替换为字段名,去求得A.L1||A.L2||A.L3 呢?谢谢您的回复。
      

  6.   

    随手敲了个存储  大致这样吧 CREATE OR REPLACE PROCEDURE p_a IS
      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; 
      

  7.   

    忘记发建表语句了 create table t1 (c1 number(5),L1 varchar2(10),L2 varchar2(10),L3 varchar2(10),L4 varchar2(10),L5 varchar2(10));
    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
      

  8.   

    如果是要更新L5  可以这样
    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;  
      

  9.   

    感谢 HJ_daxian,问题解决。
    我可能见的不多,我感觉也就是用动态语句才能处理的这么简单,非常感谢。