Sql 选择带有行号的范围
我需要一个SQL Server 2008表中的数据,该表的序列号(行号)与顺序相反(desc) 我的表名是Sql 选择带有行号的范围,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我需要一个SQL Server 2008表中的数据,该表的序列号(行号)与顺序相反(desc) 我的表名是ProductDetails 我使用这个查询 WITH Sum_Ctl (TOt) as ( select count(*)+1 from ProductDetails where ProductDetails.UserId = 38 ) SELECT Tot - ROW_NUMBER() OVER (ORDER BY PrdID asc) AS S
ProductDetails
我使用这个查询
WITH Sum_Ctl (TOt) as
(
select count(*)+1
from ProductDetails
where ProductDetails.UserId = 38
)
SELECT
Tot - ROW_NUMBER() OVER (ORDER BY PrdID asc) AS SNO,
*
FROM
ProductDetails, Sum_Ctl
WHERE
UserId = 38
用户38的表中存在2192行数据。我使用上面的查询得到它
SNO column 2192 2191 2190 .... to 1
问题是:我只需要20行数据,即2020到2000行
我在2020年到2000年期间尝试了和SNO
,但是得到了
列名“SNO”无效
然后我试着
where
UserId = 38
and Tot - ROW_NUMBER() OVER (ORDER BY PrdID asc) between 2020 and 2000
但是
窗口函数只能出现在SELECT或ORDER BY子句中
任何帮助都将不胜感激。这里的问题是您不能在子句中使用窗口函数。这是经济衰退的结果。简言之,行号是在处理完所有其他内容后生成的,包括您的应用程序中可能包含的任何筛选器 您可以使用子查询或CTE来解决此限制。在本例中,在子查询中计算。这反过来又被主查询过滤 示例
SELECT
*
FROM
(
-- SNIO will be available to outer WHERE.
SELECT
ROW_NUMBER() OVER (ORDER BY PrdID ASC) AS sno,
*
FROM
ProductDetails
WHERE
ProductDetails.UserId = 38
) AS sq
WHERE
sno BETWEEN 2000 AND 2020
;
这是因为在将结果传递给外部查询之前,子查询会被完整地处理。这里的问题是您不能在子句中使用窗口函数。这是经济衰退的结果。简言之,行号是在处理完所有其他内容后生成的,包括您的应用程序中可能包含的任何筛选器 您可以使用子查询或CTE来解决此限制。在本例中,在子查询中计算。这反过来又被主查询过滤 示例
SELECT
*
FROM
(
-- SNIO will be available to outer WHERE.
SELECT
ROW_NUMBER() OVER (ORDER BY PrdID ASC) AS sno,
*
FROM
ProductDetails
WHERE
ProductDetails.UserId = 38
) AS sq
WHERE
sno BETWEEN 2000 AND 2020
;
这是因为在将结果传递给外部查询之前,子查询是完整处理的。如果查询严重出错,请发布示例数据并output@mohan111谢谢你的回复,添加了一个示例屏幕,如果你把查询搞砸了,请发布示例数据并output@mohan111感谢您的回复,添加了一个示例屏幕快照谢谢您的回答,但是“关键字“WHERE”附近的语法不正确”用户ID列是否存在于ProductDetails中?是的,用户ID在此抱歉!我忘了给子查询加别名。示例更新。祝你好运。如果您被困在MS文档的行数生命中。感谢您的回答,但是“关键字“WHERE”附近的语法不正确”用户ID列是否存在于ProductDetails中?是的,用户ID在此抱歉!我忘了给子查询加别名。示例更新。祝你好运。如果您被困在MS文档的行数生命。