SQL Server 对除前2行之外的所有行求和

umuewwlo  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(165)

我有一个表,如下所示:

我只需要将这些行分组为3行,其中resultset中的前两行将是前两个值,其余行需要用sum(值)合并为一行。
| 代码|价值|
| - ------|- ------|
| 十七|1个|
| 十九|无|
| 休息|无|
我试过用分区表示行号,用OVER表示SUM(值),还有一些传统的一步一步的方法,这些方法有很多低效的代码。在SQL Server中有没有这样做的方法?

v7pvogib

v7pvogib1#

如果我理解正确的话,您可以首先使用row_number()进行枚举

SELECT code, value, ROW_NUMBER() OVER (ORDER BY value DESC) AS rn
FROM t

现在可以在CASE表达式中使用rn

SELECT CASE WHEN rn < 3 THEN CAST(code AS VARCHAR(10)) ELSE 'Rest' END
     , SUM(VALUE)
FROM (
    SELECT code, value, ROW_NUMBER() OVER (ORDER BY value DESC) AS rn
    FROM t
) AS tmp
GROUP BY CASE WHEN rn < 3 THEN CAST(code AS VARCHAR(10)) ELSE 'Rest' END

这当然是不确定的,但根据你的评论,这并不重要

相关问题