【问题标题】:How can I get the n-th row in the Query results?如何获取查询结果中的第 n 行?
【发布时间】:2012-01-20 07:34:10
【问题描述】:

如何获取 TSQL 查询结果的第 n 行?

假设,我想获取此 SELECT 的第二行:

SELECT * FROM table
ORDER BY 2 ASC

【问题讨论】:

  • 你的表(列)的结构是什么?它适用于 SQL Server、Oracle、Sybase ASE、DB2 吗?

标签: sql tsql


【解决方案1】:

您的目标是什么版本的 SQL Server?如果 2005 或更大,您可以使用 ROW_NUMBER 生成行号并使用该数字进行选择。 http://msdn.microsoft.com/en-us/library/ms186734.aspx

WITH orderedtable AS
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY <your order here>) AS 'RowNumber'
    FROM table
) 
SELECT * 
FROM orderedtable 
WHERE RowNumber = 2;

【讨论】:

    【解决方案2】:

    你可以使用TOPORDER BY ASC/DESC结合的技巧来达到类似于MySQL的LIMIT的效果:

    SELECT TOP 2 * INTO #temptable FROM table
    ORDER BY 2 ASC
    
    SELECT TOP 1 * FROM #temptable
    ORDER BY 2 DESC
    

    或者没有可试探的,但有嵌套的语句:

    SELECT TOP 1 * FROM
    (
        SELECT TOP 2 * FROM table
        ORDER BY 2 ASC
    ) sub
    ORDER BY 2 DESC
    

    第一次选择所有行时,直到您想要实际拥有的行,而在第二个查询中,您在排序时只选择剩余的第一行反向,这正是那个你想要的。

    来源:http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=850&lngWId=5

    【讨论】:

      【解决方案3】:

      一种方式;

      ;with T(rownumber, col1, colN) as (
          select 
               row_number() over (order by ACOLUMN) as rownumber,
               col1,
               colN
          from 
               atable
      )
      select * from T where rownumber = 2
      

      【讨论】:

        猜你喜欢
        • 2014-12-27
        • 1970-01-01
        • 2012-07-13
        • 1970-01-01
        • 2021-06-19
        • 1970-01-01
        • 2015-03-16
        • 1970-01-01
        • 2018-12-06
        相关资源
        最近更新 更多