首页 > 解决方案 > 我如何在前 3 行之后对值求和并将它们分组在其他行下

问题描述

我有一个苹果采摘完成参与者的下表。我有一张桌子,所有参与者都可以看到他们摘下的苹果数量。

现在我想要一张只显示前 3 个的表格,其余的将分组在“其他”下,并且采摘的苹果总数应该与其他苹果相对

我创建了一个包含所有 id 和收集的苹果总数的表

declare  @t table
    (
        id int,
        Apples_picked int
    )

    insert into @t
    select 1,10
    union
    select 2,12
    union
    select 3,3
    union
    select 4,15
    union
    select 5,23

上表所需的输出

ID  Name    Apples picked
5   winner  23
4   2nd     15
2   3rd     12
    Others  13

我不确定如何在第三次之后添加所有内容并总结任何指导非常感谢

标签: sqlsql-server

解决方案


;WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY Apples_picked DESC) rn
    FROM @t
)
SELECT ID, 
    CASE rn WHEN 1 THEN 'Winner' WHEN 2 THEN '2nd' WHEN 3 THEN '3rd' END AS Name, 
    cte.Apples_picked
FROM cte 
WHERE rn <= 3
UNION ALL 
SELECT NULL, 'Others', SUM(apples_picked)
FROM cte
WHERE rn > 3

回报:

ID      Name    Apples_picked
5       Winner  23
4       2nd     15
2       3rd     12
NULL    Others  13

推荐阅读