考虑下面的示例表
ProductDetailNo ProductDescription
224 Apples
225 Tomatoes
226 Potatoes
如何列出所选行的行号,如下所示?
RowNo ProductDetailNo Product Description
2 225 Tomatoes
在我的查询中使用row_number()只返回1对于单个记录,不管数据库中的逻辑行是什么。
谢谢,Damien。
答案 0 :(得分:12)
试试这个
WITH MyTable AS
(
SELECT ProductDetailNo, ProductDescription,
ROW_NUMBER() OVER ( ORDER BY ProductDetailNo ) AS 'RowNumber'
FROM Product
)
SELECT RowNumber, ProductDetailNo
FROM MyTable
WHERE ProductDetailNo = 225
答案 1 :(得分:3)
请检查此
WITH ArticleSearch AS
(
SELECT
ROW_NUMBER() OVER
(
ORDER BY tblProducts.ProductDetailNo
) AS RowNumber,
tblProducts.ProductDetailNo,
tblProducts.ProductDescription
FROM
tblProducts
)
SELECT
a.RowNumber AS SlNo,
a.ProductDetailNo,
a.ProductDescription
FROM
ArticleSearch a
WHERE
a.ProductDetailNo=225
答案 2 :(得分:2)
这个怎么样?
SELECT RowNo, ProductDetailNo, ProductDescription
FROM (SELECT ROW_NUMBER() as RowNo, ProductDetailNo, ProductDescription
FROM TheTable) as t
WHERE ProductDetailNo = 225;
答案 3 :(得分:2)
表行没有固有的行号。 ROW_NUMBER()
仅为特定结果集中的行提供行号。因此,当结果集仅包含1条记录时,预期结果是总是得到1
。如果您需要行号,则表格架构应包含类似自动递增IDENTITY
列的内容。
答案 4 :(得分:2)
WITH productCTE
AS
(SELECT ROW_NUMBER() OVER(ORDER BY ProductDetailNo, ProductDescription) AS RowNo, ProductDetailNo, ProductDescription
FROM tbl_Products
)
SELECT * FROM productCTE
WHERE RowNo = 2
答案 5 :(得分:0)
您收到的行号来自结果行数。即如果你的结果只有一个元组,那么行号。永远是1。
要获取整个表格的行号,您应该在表格中添加一个额外的属性,一个带有自动增量的 RowNo 。
希望这会有所帮助,但SQL可能会为您提供更好的解决方案!