2015-07-19 20 views
0

的一部分,我有一個表,如如何選擇這不是明顯的條款

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 

我只需要選擇具有不同的項目,代碼和數量的行列。如果項目和代碼與具有最大(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 

但我真正想要的是一個基於(項目代碼,數量)

item1 pn1 1 3 
item1 pn2 2 2 
item2 pn3 1 5 
item3 pn2 1 3 
只選擇不同行

無論Pno來自哪裏,我如何根據(項目,代碼,數量)明確選擇行?

回答

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 
+0

謝謝,我想你想說PARTITION BY item,qt,代碼而不是PARTITION BY item,pno,code – SPB