SQL:从列中删除重复项

时间:2015-02-24 12:56:16

标签: sql oracle

我一直在寻找一种从特定列中删除重复项的方法。我找到了几个删除重复行的解决方案但是,我的报告在某些列中有唯一的条目。

select li.catnr, li.av_part_no, li.artist, li.title, li.i_status, bom.av_part_no comp_part_AW, nr.c_catnr MF_CATNR, nr.c_prodtyp MF_PROD, nr1.c_catnr LF_CATNR, nr1.c_prodtyp LF_PROD 
from leos_item li, TABLE(leos_flatbom_pkg.GetFlatBOM(li.av_part_no)) bom, scm_prodtyp sp,
oes_nrbom nr, scm_prodtyp sp1, oes_nrbom nr1, scm_prodtyp sp2
where li.cunr = 'W31836'
and li.item_type = 'FP'
and not li.av_part_no is null
and not li.packtyp = 'PRSA'
and bom.parent_part_no = li.av_part_no
and bom.prodtyp = sp.prodtyp
and sp.pr_typ = 'AW'
and li.catnr = nr.p_catnr
and li.prodtyp = nr.p_prodtyp
and li.packtyp = nr.p_packtyp
and nr.c_prodtyp = sp1.prodtyp
and sp1.pr_typ = 'MT'
and li.catnr = nr1.p_catnr
and li.prodtyp = nr1.p_prodtyp
and li.packtyp = nr1.p_packtyp
and nr1.c_prodtyp = sp2.prodtyp
and sp2.pr_typ = 'LF'
and li.av_part_no = 'A0102449353-CD12-1656'

上面的脚本给了我以下结果......

enter image description here ...我想要做的是从列中删除重复项; MF_CATNR,MF_PROD,LF_CATNR,LF_PROD

期望的结果将是......

enter image description here 这可能吗?

由于 SMORF

1 个答案:

答案 0 :(得分:2)

使用CASE和RANK的组合来识别哪个是需要显示结果的第一个元素。我不确定你的数据,所以这是一个猜测,但例如你的comp_part_AW列将成为这个:

CASE RANK() OVER (PARTITION BY li.catnr, li.av_part_no, li.artist, li.title, li.i_status
             ORDER BY bom.av_part_no)
  WHEN 1 THEN nr.c_catnr END AS comp_part_AW