2017-05-04 25 views
-2

我想在ORACLE數據庫運行來自不同表的這個SQL選擇其中在(使用LISTAGG之後)

TABEL A 「SHIPMENT_LINE」

ORDERQTY_SHIP_ID SHIP_LINE_ID 
0     SLM4298700 
1     SLM4286868 
12     SLM4162661 
19     SLM4162693 

TABEL B = 「pckwrk」

SHIP_LINE_ID WRKREF 
SLM4298700 
SLM4286868 W00003HAEM 
SLM4162661 W00003DRGM 
SLM4162693 W00003DRHO 
SLM4162693 W00003DRHP 

TABEL C = 「invdtl」

WRKREF   SUBNUM 
W00003DRHP S00004979375 
W00003DRHP S00004979358 
W00003DRHP S00004979365 
W00003HAEM CTN2379829 
W00003DRGM S00004980093 
W00003DRHO S00004830248 
W00003DRHP S00004979369 
W00003DRHP S00004979346 
W00003DRHP S00004979333 



    select a.ORDERQTY_SHIP_ID,a.SHIP_LINE_ID,a.wrkref, 
       (CASE WHEN ORDERQTY_SHIP_ID>0 THEN 
         (CASE WHEN INSTR(a.wrkref, ',', 1)=0 then 
         (select LISTAGG(subnum, ''',''') WITHIN GROUP(ORDER BY wrkref) subnum 
         from invdtl 
         where wrkref in (a.wrkref)) --a.wrkref = "W00003DRGM" 
         else 
         (select LISTAGG(subnum, ''',''') WITHIN GROUP(ORDER BY wrkref)subnum 
         from invdtl 
         where wrkref in (a.wrkref))         
"a.wrkref "W00003DRHO','W00003DRHP"" 
         end) 
        else NULL 
       end)SUBNUM 
    from(select a.ORDERQTY_SHIP_ID,a.SHIP_LINE_ID, 
      (SELECT LISTAGG(wrkref, ''',''') WITHIN GROUP(ORDER BY wrkref)wrkref 
      FROM pckwrk 
      WHERE SHIP_LINE_ID =a.SHIP_LINE_ID AND PRTNUM NOT LIKE'KITPART' 
      GROUP BY SHIP_LINE_ID) as wrkref 

    from (select a.ORDERQTY_SHIP_ID,a.SHIP_LINE_ID 
      from SHIPMENT_LINE a)a)a 

結果

ORDERQTY_SHIP_ID SHIP_LINE_ID WRKREF     SUBNUM 
0    SLM4298700 NULL      NULL 
1    SLM4286868 W00003HAEM   CTN2379829 
12    SLM4162661 W00003DRGM   S00004980093 
19    SLM4162693 W00003DRHO','W00003DRHP NULL 

論個SQL where a.wrkref=W00003DRHO','W00003DRHP (select LISTAGG(subnum, ''',''') WITHIN GROUP(ORDER BY wrkref)subnum from invdtl where wrkref in (a.wrkref))是導致NULL,而不是S00004979333','S00004979346','S00004979358','S00004979365','‌​S00004979369','S0000‌​4979375如何添加的Singel報價在開始和valeue a.wrkref

+5

有什麼問題嗎? –

+0

if valeue a.werkref = W00003DRHO','W00003DRHP是結果NUll而不是S00004979333','S00004979346','S00004979358','S00004979365','S00004979369','S00004979375 – geert805

+0

請擴大你的問題。如何不能從oracle數據庫的不同表中運行這個sql? – toonice

回答

0

末這部分我猜測是你試圖使用in謂詞匹配一個字符串到一個子串,它只能在表達式相等時才能成功。嘗試like,演示

select 1 from dual 
where ''''||'W00003DRHO'',''W00003DRHP'||'''' like '%'''||'W00003DRHO'||'''%' 

因此,與

(select LISTAGG(subnum, ''',''') WITHIN GROUP(ORDER BY wrkref) subnum 
from invdtl 
where ''''+a.wrkref+'''' like '%'''||wrkref||'''%') 
0
(CASE WHEN INSTR(a.wrkref, ',', 1)=0 then 
        (select LISTAGG(subnum, ''',''') WITHIN GROUP(ORDER BY wrkref) subnum 
        from invdtl 
        where wrkref in (a.wrkref)) --a.wrkref = "W00003DRGM" 

結果替換CASE WHEN INSTR(a.wrkref, ',', 1)=0 then ... end = OK 其他 (選擇LISTAGG(subnum '' ' ''')在組(ORDER BY (a.wrkref))
「a.wrkref」W00003DRHO','W00003DRHP「result = NULL(i(wrkref))從」invrtl 「開始的子列表 nwant添加「並後a.wrkref),以獲得像‘W00003DRHO’,」 W00003DRHP」 完)

相關問題