表T1
f1         f2          f3            f4         f5
-----------------------------------------------------
001        123         1                        0
001        111         1                        0
001        622         0                        0
001        332         1                        0
001                    0            aaa         0
001                    0            bbc         2
001                    0            cbc         0
008        787         1                        0
008                    0            abc         0
008                    0            uic         3
----------------------------------------------------将表T1转换成如下形式
f1         f2          f3            f4         f5
-----------------------------------------------------
001        123         1            aaa         0
001        111         1            bbc         2
001        622         0            cbc         0
001        332         1                        0
008        787         1            abc         0
008                    0            uic         3
----------------------------------------------------先谢谢各位了

解决方案 »

  1.   

    重发~~~空格被自动去掉了~~拿null代替了
    表T1
    f1  f2  f3 f4  f5
    -----------------------------------------------------
    001 123 1 null 0
    001 111 1 null 0
    001 622 0 null 0
    001 332 1 null 0
    001 null 0 aaa 0
    001 null 0 bbc 2
    001 null 0 cbc 0
    008 787 1 null 0
    008 null 0 abc 0
    008 null 0 uic 3
    ----------------------------------------------------将表T1转换成如下形式
    f1 f2 f3 f4 f5
    -----------------------------------------------------
    001 123 1 aaa 0
    001 111 1 bbc 2
    001 622 0 cbc 0
    001 332 1 null 0
    008 787 1 abc 0
    008 null 0 uic 3
    ----------------------------------------------------先谢谢各位了
      

  2.   

    这表是想显示成类型,字段1(f2),字段1笔数,字段2(f4),字段2笔数这种样式可f2和f4中都有多余的空值,我想把这两列的多余空值合并了
      

  3.   

    WITH T1 AS(
    SELECT '001' F1, '123' F2, 1 F3, NULL F4, 0 F5 FROM DUAL UNION ALL
    SELECT '001', '111', 1, NULL, 0  FROM DUAL UNION ALL
    SELECT '001', '622', 0, NULL, 0  FROM DUAL UNION ALL
    SELECT '001', '332', 1, NULL, 0  FROM DUAL UNION ALL
    SELECT '001', NULL, 0, 'aaa', 0  FROM DUAL UNION ALL
    SELECT '001', NULL, 0, 'bbc', 2  FROM DUAL UNION ALL
    SELECT '001', NULL, 0, 'cbc', 0  FROM DUAL UNION ALL
    SELECT '008', '787', 1, NULL, 0  FROM DUAL UNION ALL
    SELECT '008', NULL, 0, 'abc', 0  FROM DUAL UNION ALL
    SELECT '008', NULL, 0, 'uic', 3  FROM DUAL 
    )
    ,T2 AS(SELECT t1.*,Row_Number()over(PARTITION BY f1 ORDER BY f1)rn FROM T1 WHERE F2 IS NOT NULL)
    ,T3 AS(SELECT t1.*,Row_Number()over(PARTITION BY f1 ORDER BY f1)rn FROM T1 WHERE F4 IS NOT NULL)
    SELECT Nvl(a.f1,b.f1) f1,Nvl(a.f2,b.f2) f2,Nvl(a.f3,0) f3,Nvl(b.f4,a.f4) f4,Nvl(b.f5,a.f5) f5 
    FROM t2 a full outer join t3 b
    on a.rn=b.rn AND a.f1=b.f1 
    ORDER BY a.f1;
    结果:
    F1    F2    F3   F4    F5
    ---------------------------
    001   123   1    aaa   0
    001   111   1    bbc   2
    001   622   0    cbc   0
    001   332   1          0
    008   787   1    abc   0
    008         0    uic   3
      

  4.   

    上面查询SQL语句中 Nvl(a.f3,0)f3 应该改成:Nvl(a.f3,b.f3)f3
    结果不变!
      

  5.   

    SQL语句博大精深啊,得好好学习学习