如何找到特定行的行号?
Posted
技术标签:
【中文标题】如何找到特定行的行号?【英文标题】: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'
但是,它不起作用。代码有什么问题? 提前致谢。
【问题讨论】:
它仍然无法正常工作。显示的错误是:“不支持 OVER SQL 构造或语句” 这被标记为SQL-Server-CE
,不支持ROW_NUMBER()
。另见:***.com/questions/8699955/sql-server-ce-row-number
@user2923116:看看SQL Server CE - ROW_NUMBER
是的..我正在使用 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'
【讨论】:
以上是关于如何找到特定行的行号?的主要内容,如果未能解决你的问题,请参考以下文章