2014-10-31 129 views
0

下面的腳本給我一個行表,顯示出一排「manuf_skus」和「distr_skus」(使用「LISTAGG」功能),刪除重複...的Oracle SQL - 從LISTAGG

select 
pd.part_no, 
pd.catnr, 
pd.prodtyp, 
pd.packtyp, 
pd.description, 
ip.purchase_type, 
li.cust_catnr categroy, 
li.licence_expire, 
listagg (nrb.p_catnr, ', ') WITHIN GROUP (ORDER BY nrb.p_catnr) manuf_skus, 
listagg (st.selection_no, ', ') WITHIN GROUP (ORDER BY st.selection_no) distr_skus, 
nvl(pd.fod_idc, 'N') FOD_IDC, 
(select max(acp.qty_free_idc)  
    from oes_fod_match acp 
    where pd.part_no = acp.part_no 
    and acp.type = 'SUP' 
    and acp.cre_dat = (select max(acp1.cre_dat) 
         from oes_fod_match acp1 
         where acp.part_no = acp1.part_no 
         and acp1.qty_free > 0 
         and acp1.type = 'SUP')) qty_free_idc, 
(select nvl(sum(pl.qty_onhand), 0) 
    from part_loc pl 
    where pl.part_no = pd.part_no 
    and pl.location_type = 'IN') total_stock_comp, 
(select nvl(max(pp.qty), 0) 
    from oes_purpos pp 
    where pp.av_part_no = pd.part_no 
    and pp.c_status != 'D' 
    and pp.datneu = (select max(pp1.datneu) 
         from oes_purpos pp1 
         where pp1.av_part_no = pp.av_part_no 
         and pp1.c_status != 'D')) last_aw_po_qty, 
(select nvl(sum(ps.requ_qty - nvl(ps.del_qty, 0)), 0) 
    from oes_purpos pp, 
    oes_purseg ps 
    where ps.headnr = pp.headnr 
    and ps.posnr = pp.posnr 
    and pp.av_part_no = pd.part_no 
    and ps.c_status not in ('9', 'D') 
    and ps.o_status not in ('D', '9')) open_aw_po_qty, 
(select sum(al.qty_required) 
    from allocations al 
    where pd.part_no = al.component_part 
    and al.status_code between '4' and '8') comp_alloc 
FROM part_description pd 
INNER JOIN inventory_purchase ip 
    ON ip.part_no = pd.part_no 
INNER JOIN scm_prodtyp pt 
    ON pt.prodtyp = pd.prodtyp 
INNER JOIN oes_fod_match acp 
    ON acp.part_no = pd.part_no 
INNER JOIN leos_item li 
    ON pd.part_no = li.av_part_no 
INNER JOIN inventory_purchase ip 
    ON ip.part_no = pd.part_no 
INNER JOIN scm_prodtyp pt 
    ON pt.prodtyp = pd.prodtyp 
INNER JOIN oes_fod_match acp 
    ON acp.part_no = pd.part_no 
INNER JOIN part_description pd3 
    ON pd3.part_no = pd.part_no 
INNER JOIN NCF_COMPPART ncf 
    ON ncf.item_part_no = pd.part_no 
INNER JOIN oes_nrbom nrb 
    ON ncf.catnr = nrb.c_catnr 
    AND ncf.prodtyp = nrb.c_prodtyp 
    AND ncf.packtyp = nrb.c_packtyp 
    AND ncf.vernr = nrb.c_vernr 
INNER JOIN part_description pd2 
    ON nrb.p_catnr = pd2.catnr 
    AND nrb.p_prodtyp = pd2.prodtyp 
    AND nrb.p_packtyp = pd2.packtyp 
LEFT OUTER JOIN [email protected]_to_cdsuk st 
    ON 9||nrb.p_catnr = st.selection_no 
WHERE pd.cunr in ('649830', 'W30000') 
    and pd.catnr = '2EDVD0017' 
    and pd.fod_idc = 'Y' 
    and pt.prodgrp = 'AW' 
GROUP BY 
    pd.part_no, 
    pd.catnr, 
    pd.prodtyp, 
    pd.packtyp, 
    pd.description, 
    ip.purchase_type, 
    li.cust_catnr, 
    li.licence_expire, 
    pd.fod_idc 

什麼我想補充的是下面的子查詢...

(select sum(ds.planqty - nvl(ds.delqty, 0)) 
    from oes_opos op, 
    oes_oposdelseg ds 
    where ds.ordnr = op.ordnr 
    and ds.posnr = op.posnr 
    and op.catnr = nrb.p_catnr 
    and op.prodtyp = nrb.p_prodtyp 
    and op.packtyp = nrb.p_packtyp 
    and ds.c_status not in ('9', 'D') 
    and op.ol_typ = 'XX' 
    group by 
    pd.catnr, nrb.catnr, nrb.prodtyp, nrb.packtyp) open_manuf_qty 

...使這項工作我要補充以下GROUP BY的

nrb.p_catnr, 
nrb.p_prodtyp, 
nrb.p_packtyp 

但是,當我添加這個子查詢時,'manuf_skus'和'distr_skus'不再在一行中。我想這是因爲我不得不添加額外的組。有沒有添加這個sum子查詢,仍然保持一行?

感謝 所有

回答

0

是其他行重複?如果是的話,你可以嘗試加入不同:

select distinct 
pd.part_no, 
pd.catnr, 
pd.prodtyp, 

....

+0

是其他行從列除了重複「MANUF_SKUS和‘DISTR_SKUS’......我想DISTINCT但不幸的是我得到相同的「重複」行。 – SMORF 2014-11-03 13:51:28