sql-server - 获取每个不同列值的前 5 个

标签 sql-server sql-server-2008 tsql

假设有一个这样的数据集

Grp   | Name (Unique)
A     | Joe
B     | Bob
C     | Jill
B     | James
如果每组(A,B,C)大约有 50 个,我如何在不执行类似操作的情况下只返回每个组的前 5 个结果
SELECT TOP 5 * FROM TABLE WHERE Grp = 'A' UNION ALL
SELECT TOP 5 * FROM TABLE WHERE Grp = 'B' UNION ALL
SELECT TOP 5 * FROM TABLE WHERE Grp = 'C'

最佳答案

尝试

SELECT Grp, Name FROM(
 SELECT Grp, Name, RANK() OVER (Partition By Grp ORDER By Name DESC) as rankname
   FROM YourTable)
    WHERE rankname <= 5
编辑:我认为这就是你想要的。如果不是,请发表评论,我们可以进行处理。

关于sql-server - 获取每个不同列值的前 5 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14994357/

相关文章:

sql - 如何在同一服务器上的两个Azure数据库之间将一个表数据复制到另一个表数据

SQL表设计帮助

sql-server - MSSQL服务器连接超时groovy grails应用程序

c# - 手动添加迁移?

sql - 我应该在删除表之前截断表以避免日志记录开销吗?

sql-server-2008 - 自动重组和重建索引

sql - 如何使用生成多行的 select 语句更新表?

sql - 具有多个变量的 T-SQL SELECT

sql-server-2008 - 选择追加到现有备份而不是覆盖

sql-server - TSQL - 使用全文 CONTAINS 的连接