2016-05-16 128 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是一个语法问题,它不能存在! –