有没有办法做一些像SQL NOT top语句?

Sai*_*udo 3 sql t-sql

我正在尝试制作一个SQL语句,它给出了前X个记录,然后所有其他的总和.第一部分很容易......

select top 3 Department, Sum(sales) as TotalSales
from Sales
group by Department
Run Code Online (Sandbox Code Playgroud)

如果我将第二个查询联合起来,那会更好......

select NOT top 3 "Others" as Department, Sum(sales) as TotalSales
from Sales
group by Department
Run Code Online (Sandbox Code Playgroud)

...对于看起来像的结果集,

Department    TotalSales
-----------   -----------
Mens Clothes  120.00
Jewelry       113.00
Shoes          98.00
Others        312.00
Run Code Online (Sandbox Code Playgroud)

有没有办法在TOP上做一个等价的NOT运算符?(我知道我可以创建一个顶级X的临时表并使用它,但我更喜欢一个只有一个sql语句的解决方案.)

Qua*_*noi 6

WITH    q AS
        (
        SELECT  ROW_NUMBER() OVER (ORDER BY SUM(sales) DESC) rn,
                CASE
                WHEN ROW_NUMBER() OVER (ORDER BY SUM(sales) DESC) <= 3 THEN
                        department
                ELSE
                        'Others'
                END AS dept,
                SUM(sales) AS sales
        FROM    sales
        GROUP BY
                department
        )
SELECT  dept, SUM(sales)
FROM    q
GROUP BY
        dept
ORDER BY
        MAX(rn)
Run Code Online (Sandbox Code Playgroud)

  • @Philip Kelley:在Dept <>'Others'然后SUM(销售)结束desc`时添加`逐个案例 (2认同)