A表有ID,A1,A2。A36,B1,B2,B16 字段。  B表有ID,A1,A2,A3,A4,A5,A6,B1字段条件:A表A1。。A36中有6个字段有数据,B1至B16中有一个字段有数据。要求:把A表中的字段不为空的数值放入B表中,B表中的A1至A6放A表中的A1至A36中的6个字段不为空的值,B表中的B1放A表中的B1至B16中的不为空的一个字段的值实际上这是一个36选7的题目有兴趣的可以写一下:方法不限我想用数组,但不知道怎么把A表中的数据放入到数组中

解决方案 »

  1.   

    我用IF语句做出来了,但是感觉不是最优的办法,有没有更好的办法怎么把A1至A16字段的值赋给一个数组变量?
      

  2.   

    彩票?是不是我的理解能力有问题?
    :把A表中的字段不为空的数值放入B表中,B表中的A1至A6放A表中的A1至A36中的6个字段不为空的值,B表中的B1放A表中的B1至B16中的不为空的一个字段的值
      

  3.   

    这样不知道是否简单些!
    INSERT INTO B(A1,A2,A3,A4,A5,A6)
    SELECT DISTINCT
           ID,MAX(DECODE(NUM,1,A1)) OVER(PARTITION BY ID),
              MAX(DECODE(NUM,2,A1)) OVER(PARTITION BY ID),
              MAX(DECODE(NUM,3,A1)) OVER(PARTITION BY ID),
              MAX(DECODE(NUM,4,A1)) OVER(PARTITION BY ID), 
              MAX(DECODE(NUM,5,A1)) OVER(PARTITION BY ID),
              MAX(DECODE(NUM,6,A1)) OVER(PARTITION BY ID)
    FROM(
    SELECT ID,A1,ROW_NUMBER() OVER(PARTITION BY ID,ORDER BY A1) NUM,    
    FROM(
      SELECT ID,A1 FROM A WHERE A1 IS NULL
      UNION ALL
      SELECT ID,A2 FROM A WHERE A2 IS NULL
      .........
      UNION 
      SELECT ID,A36 FROM A WHERE A36 IS NULL
    ))B同理,等待更好的解决方案
      

  4.   

    楼上的的方法应该可行,但是如果数据到10000的话速度就慢了.
    个人觉得用FUNCTION,数组单条执行比较好.对于B有个更好的办法:
    SELECT B1||B2||B3||B4||B5||B6||B7||B8||B9||B10||B11||B12||B13||B14||B15||B16
      FROM A
    因为B1~B16只有一个有值.同样等待更好的解决方案
      

  5.   

    select replace('INSERT INTO T6 VALUES('||
                    DECODE(NVL(F01,'#'),'#','',F01||',')||
                    DECODE(NVL(F01,'#'),'#','',F02||',')||
                    DECODE(NVL(F01,'#'),'#','',F03||',')||
                    ...
                    DECODE(NVL(F01,'#'),'#','',F36||',')||
                    ||');',
            ',)',')')
    from t36; 
    这是一高人写出来的,我没检查对不对