有3張表:
       A 表                         B 表                              C 表
 A1    A2       A3           B1     B2       B3                C1     C2      C3     C4 
 BAN   CAR001   55           BAN    CAR001   56                BAN    CAR001  07pM   AA
 BAN   CAR007   73           BAN    CAR911   35                BAN    CAR001  07pM   BB
 BAF   CAR105   12           BAF    CAR105   15                BAN    CAR001  07pL   CC
 BAN   CAR911   32                                             BAF    CAR105  01pH   DF
                                                               BAN    CAR007  08pB   CE
我要的到的結果是:
          D 
D1    D2      D3   D4   D5    D6
BAN   CAR001  55   56   07pM  AA
--    --      --   --   07pM  BB
--    --      --   --   07pL  CC
BAN   CAR007  73    0   08pB  CE    
 

解决方案 »

  1.   

    select case when a.a1 is null or b.b1 is null then '--' else a.a1 end d1,
      case when a.a2 is null or b.b2 is null then '--' else a.a2 end d1,
      case when a.a3 is null then '--' else to_char(a.a3) end d3,
      case when b.b3 is null then '--' else a.a1 end d4,
      c.c3 d5,c.c4 d6
    from a,b,c
    where c.c1=a.a1(+) and c.c2=a.a2(+)
    and c.c1=b.b1(+) and c.c2=b.b2(+)
      

  2.   

    select decode(a.a1,null,'--',a.a1) as d1,
           decode(a.a2,null,'--',a.a2) as d2,
           decode(a.a3,null,'--',a.a3) as d3,
           decode(b.b3,null,'--',b.b3) as d4,
           c.c3 as d5,
           c.c4 as d6
    from a,b,c
    where c.c1=a.a1(+)
    and c.c1=b.b1(+)
    and c.c2=a.a2(+)
    and c.c2=b.b2(+)
      

  3.   

    select C1 D1,C2 D2,A3 D3,B3 D4,C3 D5,C4 D6 
    from A a,B b,C c 
    where c.c2 = a.a2(+) and c.c2 = b.b2(+)
      

  4.   

    新手请教
    where c.c2 = a.a2(+)
    里面的(+)是什么意思
      

  5.   

     你們誤解我的意思了 我的意思是如果D1,D2,D3,D4這四列數據重複的話只顯示一條以後的用“--”代替
          謝謝 大家的支持! 期待大家的幫助!
      

  6.   

    select decode((leg(a.a1) over(partition by a.a1 order by ...)),null,a.a1, '---') from A, B, C where a.a1=c.c1 and a.a2 = c.c2 and a.a1=c.c1 and c.c1=b.b1(+) and c.c2=b.b2(+)
      

  7.   

    select case when row_number()over(partition by c.c1,c.c2,c.c3 order by rownum)>1 then '--' else c.c1 end d1,
      case when row_number()over(partition by c.c1,c.c2,c.c3 order by rownum)>1 then '--' else c.c2 end d2,
      case when row_number()over(partition by c.c1,c.c2,c.c3 order by rownum)>1 then '--' else to_char(a.a3) end d3,
      case when row_number()over(partition by c.c1,c.c2,c.c3 order by rownum)>1 then '--' else to_char(b.b3) end d4,
      c.c3 d5,c.c4 d6
    from a,b,c
    where c.c1=a.a1 and c.c2=a.a2
    and c.c1=b.b1 and c.c2=b.b2
      

  8.   


    報錯:ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
    報錯: ORA-00907: missing right parenthesis
      

  9.   

    select decode((leg(to_number(a.a1)) over(partition by a.a1 order by ...)),null,a.a1, '---') from A, B, C where a.a1=c.c1 and a.a2 = c.c2 and a.a1=c.c1 and c.c1=b.b1(+) and c.c2=b.b2(+) 
      

  10.   

    with a as (select 'BAN' a1,'CAR001' a2,55 a3 from dual 
      union all select 'BAN' a1,'CAR007' a2,73 a3 from dual
      union all select 'BAF' a1,'CAR105' a2,12 a3 from dual
      union all select 'BAN' a1,'CAR911' a2,32 a3 from dual),
      b as(select 'BAN' b1,'CAR001' b2,56 b3 from dual
      union all select 'BAN' b1,'CAR911' b2,35 b3 from dual
      union all select 'BAF' b1,'CAR105' b2,15 b3 from dual),
      c as(select 'BAN' c1,'CAR001' c2,'07pm' c3,'AA' c4 from dual
      union all select 'BAN' c1,'CAR001' c2,'07pm' c3,'BB' c4 from dual
      union all select 'BAN' c1,'CAR001' c2,'07pl' c3,'CC' c4 from dual
      union all select 'BAF' c1,'CAR105' c2,'01ph' c3,'DF' c4 from dual
      union all select 'BAN' c1,'CAR007' c2,'08pb' c3,'CE' c4 from dual)
      
    select case when row_number()over(partition by c.c1,c.c2 order by c4)>1 then '--' else c.c1 end d1,
      case when row_number()over(partition by c.c1,c.c2 order by c4)>1 then '--' else c.c2 end d2,
      case when row_number()over(partition by c.c1,c.c2 order by c4)>1 then '--' else to_char(nvl(a.a3,0)) end d3,
      case when row_number()over(partition by c.c1,c.c2 order by c4)>1 then '--' else to_char(nvl(b.b3,0)) end d4,
      c.c3 d5,c.c4 d6
    from a,b,c
    where c.c1=a.a1(+) and c.c2=a.a2(+)
    and c.c1=b.b1(+) and c.c2=b.b2(+)
    order by c.c1,d6BAF CAR105 12 15 01ph DF
    BAN CAR001 55 56 07pm AA
    -- -- -- -- 07pm BB
    -- -- -- -- 07pl CC
    BAN CAR007 73 0 08pb CE
      

  11.   

    ORA-00907: missing right parenthesis应该是某个关键字打错了吧
    比如partition by
      

  12.   

      謝謝 您的幫助 我按照您的方法得到的結果已是那種格式但是前幾列的數據不顯示:
            請幫助
      d1    d2         d3           d4    d5         d6            d7
    926F1  -1  911-7357-001  960  0   07PM945405  7C4S0001
    --     --  --            --   --  07PM945405  7C4S0002
    --     --  --            --   --  07PM945405  7C4S0003
    --     --  --            --   --  07PM945405  7C4S0004
    --     --  --            --   --  07PM945405  7C4S0005
    --     --  --            --   --  07PM945405  7C4S0006
    --     --  --            --   --  09PV008461 7C4S0007
    --     --  --            --   --  09PV008461 7C4S0008
    --     --  --            --   --  09PV008461 7C4S0009
    --     --  --            --   --  09PV008461 7C4S0010
      

  13.   

    不显示,是指显示'--'吗?因为它们的d1    d2  部分和前面记录的值重复了吧
    你可以将代码的case when row_number()over(partition by c.c1,c.c2 order by c4)>1 then '--' else c.c1 end ..都换成else后面的值,先取消'--'看下
      

  14.   

      不顯示指的是前面幾列沒有重複了 它也顯示“--”  d1列d2列 按您說的 換成值了 d1     d2      d3      d4     d5       d6       d7
    926F1  -1  911-7357-001  960  0   07PM945405  7C4S0001
    926F1  --  911-7357-001  --   --  07PM945405  7C4S0002
    926F1  --  911-7357-001  --   --  07PM945405  7C4S0003
    926F1  --  911-7357-001  --   --  07PM945405  7C4S0004
    926F1  --  911-7357-001  --   --  07PM945405  7C4S0005
    926F1  --  911-7357-001  --   --  07PM945405  7C4S0006
    926F1  --  912-V118H1-102 --   --  08PV055884  7C4S0007
    926F1  --  912-V118H1-102 --   --  08PV055884 7C4S0008
    926F1  --  912-V118H1-102 --   --  08PV055884 7C4S0009
      

  15.   

    有点晕了..
    你显示了d1和d3,d2没有改
    d1这里都重复啊,不知d2情况如何
    还有你在14楼的回复中,d7为7C4S0009 对应记录的d6是09PV008461 ,到16楼怎么就变成08PV055884 了?
    我的代码中的order by c.c1,d6改下
    换成order by c.c1,c.c2,c.c4看看
      

  16.   

    BAN    CAR001    55    56    07pm    AA
    --       --       --    --    07pm    BB
    --       --       --    --    07pl    CC
    BAN     CAR007    73    0    08pb   CE您這是我想要的結果 
      

  17.   

    例子中结果字段数为6个,你上面的结果里是7个。。partition 和order的字段要对应好
    最后的order by c.c1,c.c2,c.c4要对上。其中c.c1和c.c2是parition by后面的字段名,c.c4是partition by 后面order by里的字段名
    再试试
      

  18.   

      A
    庫房     機種             ms_數量                                       
    926F1  911-7525H1-106  4180                                  
    926F1  912-7525H1-107  7700                                 
    926F1  912-V118H1-101  60                                     
             B
    庫房      機種            mb_數量     
    926F1  911-7525H1-106  5750                                  
    926F1  911-7525H1-107  8300                                  
    926F1  911-7613H1-101  5380                                  
            C
    機種                工單             箱號            庫房
    911-7525H1-107  09PM029542  94JB3680  926F1
    911-7525H1-107  09PM029542  94JB3694  926F1
    911-7525H1-107  09PM029542  94JB3726  926F1
    911-7525H1-106  09PM029544  94JB2662  926F1
    911-7525H1-106  09PM029544  94JB2677  926F1
    911-7525H1-106  09PM029544  94JB2680  926F1
    結果
    庫房    機種            ms_數量  mb_數量   工單        箱號                          926F1 911-7525H1-106  4180     5750  09PM029544  94JB2662 
    ---    ---             ---     ---   09PM029544  94JB2677 
    ---    ---             ---     ---   09PM029544  94JB2680 
    926F1 911-7525H1-107  7700     8300  09PM029542  94JB3680 
    ---   ---              ---     ---   09PM029542  94JB3694 
    ---   ---              ---     ---   09PM029542  94JB3726