你这个要用case when或decode     加group就搞定了吧~

解决方案 »

  1.   

    ,,,,70多个字段。这,,,,我要写70多个CASE when,,,
    有什么更好的 方案么?
      

  2.   

    楼上的你看懂他什么意思了?
    合并表吧,表的结构你难道不用先创建插入的列然后再插入?主表都没地方了你还想往哪插?更改主表属性然后再update就好,我感觉怎么还是重建比较好,或者视图也不行?
      

  3.   

    有点明白啥意思了,看看是这意思不?
    select 
    NVL(A.C1,B.C1) C1,
    NVL(A.C2,B.C2) C2,
    NVL(A.C3,B.C3) C3,
    NVL(A.C4,B.C4) C4
    ……
    FROM T A,T B
    WHERE A.id >B.id
      

  4.   

    假设你的表为T
    这个表自关联,分别起别名为A和B
    你把语句中的T改为你的表名,去试下
      

  5.   


    with table_name(id,col1,col2,c)as(
    select 1,null,'S1','C1' from dual
    union all
    select 2,'N2',null,'C1' from dual
    union all
    select 3,'N3','S3','C2' from dual
    )
    SELECT id, col1, col2, c
      FROM (SELECT id,
                   MAX(t.col1) over(PARTITION BY t.c) col1,  --此处只写了c字段相同分组 楼主多个自行修改
                   MAX(t.col2) over(PARTITION BY t.c) col2,
                   row_number() over(PARTITION BY t.c ORDER BY t.id DESC) rn,
                   t.c
              FROM table_name t)
     WHERE rn = 1;--结果:
            ID COL1 COL2 C
    ---------- ---- ---- --
             2 N2   S1   C1
             3 N3   S3   C2
      

  6.   

    我用的是SQLserver 2008 NVL 好像无效啊
      

  7.   


    这是oracle区,sqlsevel只能使用case when实现了
      

  8.   

    欧了,我错了,,,,,,
    但是 学了一招 NVL 给力,,,
    仍然感谢!