希望标题解释得足够,但我希望能够在两个值之间的SQL Server表中选择行
例如
SELECT * FROM table WHERE rows between 20 and 60
我尝试了ROW_NUMBER()然后使用WHERE子句....
谢谢,
杰森
答案 0 :(得分:10)
SELECT TOP 40 * FROM (SELECT TOP 60 * FROM table ORDER BY xx ASC) t ORDER BY xx DESC
由于select语句的输出可以按任何顺序返回记录(没有order by子句),您需要决定应用于记录的顺序...如果您不知道或不关心,请使用主键(替代xx)
答案 1 :(得分:6)
WITH mytable AS
(
SELECT *,
ROW_NUMBER() OVER (order by colname) AS 'RowNumber'
FROM table
)
SELECT *
FROM myTable
WHERE RowNumber BETWEEN 20 AND 60;
答案 2 :(得分:3)
如果你有SQL Server 2012(或更高版本),你可以使用Offset-Fetch
见Microsoft Technet Article on the Offset-Fetch Clause
您需要指定一个Order-By(我认为很明显)。
如果你想要20到60之间的行,那么你真正想说的是你想从20开始(你的偏移),然后选择(或获取)下一个40。
SELECT *
FROM TableName
ORDER BY SomeColumnName
OFFSET 20 ROWS
FETCH NEXT 40 ROWS ONLY
您甚至可以将变量和计算用于获取和偏移值 以下是问题所要求的示例:20到60之间的行
DECLARE @RowStart Int = 20
DECLARE @RowEnd Int = 60
SELECT *
FROM TableName
ORDER BY SomeColumnName
OFFSET @RowStart ROWS
FETCH NEXT (@RowEnd - @RowStart) ROWS ONLY
答案 3 :(得分:2)
在以前的SQL版本中,一个选项是使用临时表:
SELECT IDENTITY(int,1,1) RowNumber,*
into #Temp
FROM Table1
SELECT *
FROM #Temp
WHERE RowNumber between 20 and 60
答案 4 :(得分:1)
此查询可以为您提供帮助:
select * from tablename order by columnname offset 20 rows fetch next 40 rows only
它将第21行视为第1行,并从第21行中获取接下来的40行。
答案 5 :(得分:0)
选择* from(选择row_number()over(按Column_name排序)为Num,Col_name1,Col_name2,来自table_name的Col_name3) Table_name其中Num> 5且Num< 10;
例如:
从emp中选择*;
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
选择了14行。
SQL>选择* from(选择row_number()over(按empno排序)为Num,ename,empno,deptno,sal from emp) emp,其中Num> 5且Num< 10;
NUM ENAME EMPNO DEPTNO SAL
6 BLAKE 7698 30 2850
7 CLARK 7782 10 2450
8 SCOTT 7788 20 3000
9 KING 7839 10 5000
SQL>