【问题标题】:How to retrieve specific rows from SQL Server table?如何从 SQL Server 表中检索特定行?
【发布时间】:2013-09-13 12:17:39
【问题描述】:

我想知道有没有办法从包含 100 行的 SQL 表中检索例如第 2 行和第 5 行?

我看到了一些带有WHERE 子句的解决方案,但它们都假设应用WHERE 子句的列是线性的,从1 开始。

如果表中没有值从 1 开始的列,是否还有其他方法可以查询 SQL Server 表中的特定行?

附: - 我知道一个带有临时表的解决方案,您可以在其中复制您的选择语句输出并向表中添加一个线性列。我正在使用 T-SQL

【问题讨论】:

  • 你的sql数据检索条件是什么
  • 您使用的是哪种 SQL? MySQL、MSSQL、Postgres 等?
  • 您使用的是哪个 RDBMS? Rownum 功能现在在大多数系统中都可用,但根据系统的定义仍然有很大不同。
  • @UpvoteMarkAnswer - 我的情况?我必须在 5,6 或 7 点返回行
  • 关系表中没有“第 2”行。您需要有某种“排序标准”才能识别“第二”行。

标签: sql sql-server sql-server-2012


【解决方案1】:

试试这个,

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY ColumnName ASC) AS rownumber
    FROM TableName
)  as temptablename
WHERE rownumber IN (2,5)

【讨论】:

    【解决方案2】:

    使用 SQL Server:

    ; WITH Base AS (
        SELECT *, ROW_NUMBER() OVER (ORDER BY id) RN FROM YourTable
    )
    
    SELECT *
        FROM Base WHERE RN IN (2, 5)
    

    id 您必须用您的主键或您的顺序替换,YourTable 就是您的表。

    这是一个 CTE(通用表表达式),因此它不是临时表。它将与您的查询一起扩展。

    【讨论】:

    • 对不起,我猜你没看懂,我没有从 1 开始线性递增的列。
    • @AntunTun 我告诉过你你需要一个线性增量的列吗? :-)
    • 如果您有 top 子句,则需要额外的 order by,否则无法保证您将获得第 2 行和第 5 行。
    • @podiluska 你可能是对的......虽然我总是得到由ROW_NUMBER() 排序的行,如果我只使用它,它可能是一个副作用,而不是确定的。
    【解决方案3】:

    表格中没有第 2 行或第 5 行。

    您返回的结果集中只有第 2 个或第 5 个结果,由您在该查询中指定的顺序确定。

    【讨论】:

    • 我知道,我在考虑非线性主键列的第二个
    【解决方案4】:

    如果您使用的是 SQL Server 2005 或更高版本,则可以使用Row_Number() 函数。例如:

    ;With CTE as (
        select col1, ..., row_number() over (order by yourOrderingCol) rn
        from yourTable
    )
    select col1,...
    from cte
    where rn in (2,5)
    

    请注意yourOrderingCol 将决定行号的值(即rn)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2015-01-26
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多