基于oracle中不同表中的字段对行进行分组

时间:2013-08-12 17:07:41

标签: sql oracle group-by

过去两天我正在使用这两张表

parts_list表:

PART_ID VENDOR_ID   LABEL   
1          5        A
1          2        B
1          3        C
2          2        D
2          3        E
3          3        F

vendor_prsdnc表:

VENDOR_ID   PRSCDNC 
5           3
2           2
3           1

有人可以告诉我如何从优先级最高的供应商处检索每个零件的标签?例如,id为1的部分由3个供应商提供,但我们需要来自供应商的具有最高优先级的部分,即5.预期结果是:

PART_ID VENDOR_ID   LABEL   
1           5       A
2           2       D
3           3       F

[供应商ID与优先级不成比例]

我有这个查询

SELECT 
    SDS.PART_ID,
    SDSIS.VENDOR_ID,
    MAX(SDSIS.PRSCDNC) 
FROM PARTS_LIST SDS,VENDOR_PRSDNC SDSIS 
WHERE SDS.VENDOR_ID=SDSIS.VENDOR_ID 
GROUP BY SDS.PART_ID,SDSIS.VENDOR_ID; 

但它不会返回预期的结果。

1 个答案:

答案 0 :(得分:1)

没有经过测试,但我认为它应该可行

select part_id,vendor_id,label
from
(
 select pl.part_id
       ,pl.vendor_id
       ,pl.label
       ,vp.prscdnc
       ,max(vp.prscdnc) over (partition by pl.part_id) mx
   from part_list pl,vendor_prsdnc vp
   where pl.vendor_id=vp.vendor_id
 )
 where prscdnc =mx;