[英]Oracle SQL - remove duplicates from listagg
The following script gives me a one line table, showing 'manuf_skus' and 'distr_skus' in one row (using the 'listagg' function)... 以下脚本给了我一张单行表,在一行中显示了“ manuf_skus”和“ distr_skus”(使用“ 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 BDS_SELECTION_ORG@sid_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
What I would like to add is the following subquery ... 我想添加的是以下子查询...
(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
... to make this work I have to add the following GROUP BY's ...为了使这项工作,我必须添加以下GROUP BY
nrb.p_catnr,
nrb.p_prodtyp,
nrb.p_packtyp
But, when I add this subquery, the 'manuf_skus' and 'distr_skus' are no longer in one row. 但是,当我添加此子查询时,“ manuf_skus”和“ distr_skus”不再排成一行。 I assume this is because I've had to add the extra group by's.
我认为这是因为我必须添加额外的分组依据。 Is there of adding this sum subquery and still keeping one row?
是否有添加此总和子查询并仍然保留一行?
Thanks All 谢谢大家
Are the additional rows duplicates? 额外的行是否重复? If so, you might try adding a distinct:
如果是这样,您可以尝试添加一个不同的:
select distinct
pd.part_no,
pd.catnr,
pd.prodtyp,
.... ....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.