sql – 使用两个变量选择TOP N.

我在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会有所帮助.此外,如果您的记录具有不同的记录,这可以帮助您在它们之间做出决定.

点赞