SQL Server选择前10-20个结果?

Nic*_*las 23 sql sql-server

我有两列第一个我想要十大产品(1-10)

那是

SELECT TOP 10 * FROM Product   
Run Code Online (Sandbox Code Playgroud)

在第二列中,我想要接下来的10个结果(11-20)

我怎么做?

Mar*_*ith 28

WITH T AS
(
SELECT TOP 20 name, 
       row_number() OVER (ORDER BY id) AS RN
FROM Products
ORDER BY id
)
SELECT 
       MAX(CASE WHEN RN <=10 THEN name END) AS Col1,
       MAX(CASE WHEN RN > 10 THEN name END) AS Col2
FROM T       
GROUP BY RN % 10
Run Code Online (Sandbox Code Playgroud)

  • 我必须承认我多么喜欢阅读马丁和马克的解决方案.两者都是+1 (3认同)
  • +1 darn - 这甚至比我的解决方案更聪明,对执行计划的"减税" - 恭喜! (2认同)

Nab*_*ter 8

我会这样做:

SELECT [columns] FROM [table names] ORDER BY [column name] DESC LIMIT 10 OFFSET 10;
Run Code Online (Sandbox Code Playgroud)

这更简单,更简单....

你们有什么感想?

  • 它似乎不适用于 SQL Server,但如果您将 LIMIT 10 OFFSET 10 替换为 OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;然后它就可以在 SQL Server 上运行了。 (2认同)

sk2*_*185 7

select top 10 wwwhid from wwwh  where wwwhid not in(select top 10 wwwhid from wwwh)
Run Code Online (Sandbox Code Playgroud)


Acc*_*ied 5

从 SQL Server 2012按偏移/获取功能排序开始:

SELECT *
FROM SomeTable
ORDER BY someIdField 
    OFFSET 10 ROWS
    FETCH NEXT 10 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)