【问题标题】:SELECT TOP N With Two VariablesSELECT TOP N 有两个变量
【发布时间】:2010-04-13 08:22:58
【问题描述】:

我在一个 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,我只是不确定如何一口气完成。

为这个厚厚的问题道歉......没有任何借口。感谢您的帮助。

【问题讨论】:

  • 顺便说一句,它“一举一动” ;-) phrases.org.uk/meanings/at-one-fell-swoop.html
  • 您使用的是哪个版本的 SQL Server?
  • 我喜欢詹姆斯的那个更正...我会很高兴地接受它并从现在开始纠正其他所有人:) 这是目前在 old school 2000 Ada

标签: sql tsql sql-server-2000


【解决方案1】:

您好,以下工作在 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

内部Select Count(*) 查询的工作原理是计算它当前查看的记录上方有多少记录 - 在这种情况下,您希望 b 为 0(第 1 位)或 1(第 2 位)。

请注意,因此,如果您有超过 2 个值共享首位(例如 3 个 A/1 的所有销售额为 15),您将获得超过 2 个结果。

但是,对于您的测试集,它会返回正确的结果,如果您希望在这种情况下获得更少而不是更多的结果,使用 DISTINCT 会有所帮助。此外,如果您的记录具有不同的 recordid,这可能有助于您在它们之间做出决定。

【讨论】:

  • 谢谢,这有助于我刚刚被要求提供帮助的另一个查询。
  • 感谢 CResults - 非常有用的 SQL。
【解决方案2】:

这是您需要在 SQL Server 2000 上运行的一个:

select distinct t1.Cust, t1.GroupID, t1.Sale 
from Test t1 inner join Test t2 on t1.Cust = t2.Cust and t1.GroupID = t2.GroupID
where t1.Sale>t2.Sale
order by Cust, GroupID, Sale desc

在 SQL Server 2005+ 上运行的等效项:

select Cust, GroupID, Sale
from (
    SELECT *, rank() over(partition by Cust, GroupID order by sale desc) as n 
    FROM dbo.Test
     ) dt
where dt.n<=2
order by Cust, GroupID, Sale desc

【讨论】:

  • 当然可以,如果您已将数据插入到名为 Test 的表中。
  • 执行以下INSERT INTO Test VALUES ('A',1,20) 并重新测试
猜你喜欢
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
相关资源
最近更新 更多