sql - 显示前三个值以及所有其他值的总和

标签 sql sql-server

在我ORDER BY cnt DESC之后,我的结果是

fld1  cnt
 A     9
 E     8
 D     6
 C     2
 B     2
 F     1

我需要显示前 3 个,其余的汇总为“其他”,如下所示:

fld1  cnt
A      9
E      8
D      6
other  5

编辑:

感谢大家的意见。如果您看到实际的声明,也许会对您有所帮助:

SELECT 
    CAST(u.FA AS VARCHAR(300)) AS FA,
    COUNT(*) AS Total,
    COUNT(CASE WHEN r.RT IN (1,11,12,17) THEN r.RT END) AS Jr,
    COUNT(CASE WHEN r.RT IN (3,4,13) THEN r.RT END) AS Bk,
    COUNT(CASE WHEN r.RT NOT IN (1,11,12,17,3,4,13) THEN r.RT END ) AS Other
FROM R r
    INNER JOIN DB..RTL rt
    ON r.RT = rt.RTID
    INNER JOIN U u
    ON r.UID = u.UID
WHERE rt.LC = 'en' 
GROUP BY CAST(u.FA AS VARCHAR(300))--FA is ntext
ORDER BY Total DESC

生成的结果有 19 条记录。我需要显示前 5 名,并将其余的总结为“其他 FA”。我不想用这种语句从选择中进行选择。我更寻找一些 SQL 函数。也许 ROW_NUMBER 是个好主意,但我不知道在这种情况下到底如何应用它。

最佳答案

可能是这样的:

select top 3 fld1, cnt from mytable
union
select 'Z - Other', sum(cnt) from mytable
where fld1 not in (select top 3 fld1 from mytable order by fld1)
order by fld1

(更新为包括排序依据)

关于sql - 显示前三个值以及所有其他值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18540389/

相关文章:

mysql - 如何检查 INSERT 在存储函数中是否运行良好?

sql-server - 从 Postgres 迁移到 SQL Server 2008

sql-server - 在子句中使用 SQL Server 变量

sql - 如何识别 where 子句匹配的模式

php - mysql用户订阅查询失败

mysql - 从子查询中删除

SQL Server 2008条件选择输出多个真值

mysql - 使用相同的表和属性返回不同类型的人

sql - 这个声明是如何运作的?

sql-server - 在Delphi中使用ADO使用多个INSERT,UPDATE等语句执行SQL脚本时的错误处理