2016-05-16 108 views
0

我有一個表的產品列表,模式是:聚合函數混淆

Product, Warehouse, Supplier, Order Quantity 

我想要做的就是每個供應商,選擇具有最訂單數量的倉庫。

表數據:

Cornflakes, WH1, Kellogs, 10 
Cornflakes, WH2, Kellogs, 5 
Cornflakes, WH3, Kellogs, 0 
Crunchy, WH1, Cadbury, 20 
Crunchy, WH2, Cadbury, 10 
Mars,  WH1, Cadbury. 56 
Mars,  WH4, Cadbury, 8 

我認爲有足夠的信息,這裏提供一個簡單的答案,如果沒有,請跟我要澄清一個評論,而不是downvote,我會非常快速編輯問題。

樣本輸出:

Kellogs, WH1 
Cadbury, WH1 

倉庫數目將是這一個,因爲它有最總量訂購該供應商在每一個產品。

+0

你能不能給你想要的東西的樣本輸出。這將有助於清除問題。 –

+0

完成,謝謝您的反饋。 –

回答

1

MS SQL 2008+

SELECT Supplier, Warehouse 
FROM (
    SELECT Warehouse, Supplier, rn=ROW_NUMBER() OVER (PARTITION BY Supplier ORDER BY SUM([Order Quantity]) DESC) 
    FROM t 
    GROUP BY Warehouse, Supplier 
) tt 
WHERE rn=1 
+0

這是天才!有用!我將重新格式化一點,但邏輯是完善的。只是一個附註,你有一個語法錯誤,在OVER子句中的PARTITION BY和ORDER BY不能用逗號分隔。 –

+0

錯誤更正,謝謝。 – Serg

+0

謝謝你的回答。我只是沒有想到行號! –

0

試試這個:

select a.supplier,a.warehouse,a.max(Order Quantity) from 
(select supplier,warehouse,sum(Order Quantity) as quantity from products 
group by supplier,warehouse)a 
group by a.supplier,a.warehouse 
+0

不好,語法錯誤:找不到列「a」或用戶定義的函數或聚集「a.max」,或名稱不明確。 –

+0

我認爲列名稱不正確。 – shankarsh15

+0

我根據我的實際查詢更正了列名。你的答案中有一個語法錯誤。 a.MAX是一個語法問題,它不能存在! –