我有一个表的格式为:
A1    A2    A3   WK01   WK02    WK03
AA    AB    AB    3      52      
AV    C      F    10     20      30
DD    EF    DF                   10
AS    FF    DF    10  
DD    WW    EE              现在要根据WK01,WK02,WK03 若他们都有数字则非空列为3,若其中有一个没有数值则为2.结果为:A1    A2    A3   WK01   WK02    WK03      WK04
AA    AB    AB    3      52                 2
AV    C      F    10     20      30         3
DD    EF    DF                   10         1
AS    FF    DF    10                        1
DD    WW    EE                              0这样如何在ORACLE 数据库中实现?
谢谢!

解决方案 »

  1.   

    select t.*,decode(wk01,'',0,1)+decode(wk02,'',0,1)+decode(wk03,'',0,1) wk04
    from tb t;
      

  2.   

    2楼的对,用nvl2,select a1, a2, a3, 
    nvl2(wk01, 1, 0) +
    nvl2(wk02, 1, 0) +
    nvl2(wk03, 1, 0) +
    nvl2(wk04, 1, 0) +
    nvl2(wk05, 1, 0) +
    ....
    nvl2(wknn, 1, 0)
    from table;如果列多的话,就用excel或者ultraedit来编辑
      

  3.   

    with a as(select 1 a ,2 b,3 c
    from dual
    union
    select 1 a ,null b,3 c
    from dual
    union
    select 1 a ,2 b,null c
    from dual
    union
    select 1 a ,null b,null c
    from dual)select *
    from a
    order by a,b,c nulls last