【发布时间】:2018-06-14 18:49:08
【问题描述】:
我需要将LIMIT 和OFFSET 应用于MSSQL server 2008 中的原始查询(无需修改)。
假设原始查询是:
SELECT * FROM energy_usage
(但它可以是任意的 SELECT 查询)
到目前为止,我就是这么想的:
1. 它可以满足我的需要,但查询会生成我不需要的 extra 列 row_number。
WITH OrderedTable AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS row_number, * FROM energy_usage
)
SELECT * FROM OrderedTable WHERE row_number BETWEEN 1 AND 10
2.这个由于某种原因不起作用并返回以下错误。
SELECT real_sql.* FROM (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS row_number, * FROM (SELECT * FROM energy_usage) as real_sql) as subquery
WHERE row_number BETWEEN 1 AND 10
比较常见的情况是:
SELECT real_sql.* FROM (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS row_number, * FROM (real sql query) as real_sql) as subquery
WHERE row_number BETWEEN {offset} + 1 AND {limit} + {offset}
错误:
列前缀“real_sql”与表名或别名不匹配 查询中使用的名称。
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql