我在SQL表中有以下示例
Cust Group Sales
A 1 15
A 1 10
A 1 5
A 2 15
A 2 10
A 2 5
B 1 15
B 1 10
B 1 5
B 2 15
B 2 10
B 2 5
我希望展示的是每个客户的前2个产品,每个组按销售额降序排序,即
Cust Group Sales
A 1 15
A 1 10
A 2 15
A 2 10
B 1 15
B 1 10
B 2 15
B 2 10
我假设我需要声明两个变量,Cust和Group,我只是不确定如何一举完成这个.
为厚厚的问题道歉……没有任何借口.谢谢你的帮助.
最佳答案 您好以下在MSSQL2000中工作
SELECT tbl.Cust,
tbl.Group,
tbl.Sales
FROM MyTable tbl
WHERE (SELECT COUNT(*)
FROM MyTable tbl2
WHERE tbl2.Sales > tbl.Sales
AND tbl2.Group = tbl.Group
AND tbl2.Cust = tbl.Cust) < 2
ORDER BY tbl.Cust ASC,
tbl.Group ASC,
tbl.Sales DESC
内部选择计数(*)查询通过计算当前正在查看的记录上方有多少记录来工作 – 在这种情况下,您希望b在0(第一位)或第一位(第二位).
请注意,因此,如果您有超过2个值共享最高点(例如3 A / 1的所有销售额为15),您将获得超过2个结果.
但是,对于您的测试集,它会返回正确的结果,如果您希望在此实例中获得更少而不是更多结果,则使用DISTINCT会有所帮助.此外,如果您的记录具有不同的记录,这可以帮助您在它们之间做出决定.