【问题标题】:How can I find the row number of a particular row?如何找到特定行的行号?
【发布时间】:2014-01-18 05:49:33
【问题描述】:

我有一个这样的数据库表:

我想获取第二行的行号。我使用以下代码:

SELECT ROW_NUMBER() OVER(ORDER BY Name) From Deposit WHERE Name='Murali'

但是,它不起作用。代码有什么问题? 提前致谢。

【问题讨论】:

标签: c# sql sql-server-ce


【解决方案1】:

ROW_NUMBER 函数返回结果数据集中的行号。

在您的查询中,您将结果限制为仅限名称为Murali 的人。由于您只有一条这样的记录,因此返回 1 是正常的。

在 SQL 中没有行号这样的概念。表行没有顺序。只有在进行 SQL 查询时,顺序的概念才有意义。没有 SQL 查询,您根本无法谈论订单和行号。

看来您需要为每个用户介绍一些订单号。实现这一点的正确方法是将Order 列添加到您的Deposit 表中。现在为了检索它,您将使用以下查询:

SELECT [Order] From Deposit WHERE Name = 'Murali'

剩下的就是让Order 列自动递增,然后你就可以开始了。每次插入新记录时,该值将自动递增。所以你去,现在你有一个顺序,它代表记录被插入到表中的顺序。你现在有了上下文。

【讨论】:

  • 有没有办法找到行号..?
  • 您需要先定义行号的含义。因为我在回答中已经解释过 SQL 中没有这样的概念。
  • 我的目标是当用户输入“Murali”时,它应该返回 2。有什么办法..?
  • 但是为什么它应该返回 2?这没有任何意义。如果您想引入这样的概念,只需将Order 列添加到您将存储此信息的表中。
  • 那么您只需要一个Order 列。
【解决方案2】:

可能是这样的(如果我理解正确的话):

SELECT Q.RN FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY Name) AS RN, * From Deposit
) AS Q
WHERE Q.Name = 'Murali'

【讨论】:

    【解决方案3】:

    试试这个

    WITH TempTable AS
        (
            SELECT Name,ROW_NUMBER() OVER (ORDER BY Name) AS 'RowNumber'
            FROM Deposit
        ) 
        SELECT RowNumber,Name
        FROM TempTable 
    WHERE Name='Murali'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2013-06-15
      相关资源
      最近更新 更多