如何选择不属于distinct子句的列

时间:2015-07-19 00:28:22

标签: sql-server

我有一张表,例如

Item    Pno   Code  qty

item1   pn1    1     3
item1   pn2    1     3
item1   pn2    2     2
item2   pn1    1     4
item2   pn3    1     5
item3   pn2    1     3

我想只选择具有不同Item,Code和qty的行。如果Item和代码相同,则应选择具有Max(qty)的行。

使用以下查询:

select x.item,pno,x.code,qty from @temp t  join 
(select item,code,max(qty) as quantity from @temp
group by item, code) x on t.item = x.item and t.code = x.code and t.qty = x.quantity
order by item,pno

我明白了:

item1   pn1  1   3
item1   pn2  1   3
item1   pn2  2   2
item2   pn3  1   5
item3   pn2  1   3

但我真正想要的是根据(item,code,qty)选择不同的行

item1   pn1  1   3
item1   pn2  2   2
item2   pn3  1   5
item3   pn2  1   3

无论Pno是什么,我如何根据(项目,代码,数量)清楚地选择行?

1 个答案:

答案 0 :(得分:2)

;WITH CTE AS (
select * 
      ,ROW_NUMBER() OVER (PARTITION BY item,pno,code ORDER BY qty DESC)rn
from @temp)
SELECT item,pno,code, qty
FROM CTE 
WHERE rn = 1