SQL Server的两个值
希望标题解释了它足够的,但我希望能够在两个值SQL Server的两个值
例如
SELECT * FROM table WHERE rows between 20 and 60
我之间选择一个SQL Server表行之间选择行试过ROW_NUMBER(),然后使用WHERE子句....
谢谢,
杰森
SELECT TOP 40 * FROM (SELECT TOP 60 * FROM table ORDER BY xx ASC) t ORDER BY xx DESC
由于select语句可以按任何顺序返回记录(没有order by子句),你需要决定适用的以记录......如果你不使用主键的输出“知道或护理(替代XX)
WITH mytable AS
(
SELECT *,
ROW_NUMBER() OVER (order by colname) AS 'RowNumber'
FROM table
)
SELECT *
FROM myTable
WHERE RowNumber BETWEEN 20 AND 60;
在SQL的早期版本,一个选择是使用临时表:
SELECT IDENTITY(int,1,1) RowNumber,*
into #Temp
FROM Table1
SELECT *
FROM #Temp
WHERE RowNumber between 20 and 60
如果您有SQL Server 2012中(或更高版本),你可以使用偏移 - 为此获取。
看到这个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
SELECT *行(选择ROW_NUMBER()OVER(ORDER BY列名)作为民,Col_name1,Col_name2,Col_name3从TABLE_NAME) Table_name其中Num> 5和Num < 10;
例如:
Select * from 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> SELECT * FROM(SELECT ROW_NUMBER()以上(由EMPNO顺序)货号,ENAME,EMPNO,DEPTNO,从EMP SAL) 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>
+1。这个双“顶”模式始终有效。 – RollingBoy 2011-03-30 01:56:38
一个有趣的+1,不包括@RollingBoy的投票。 – Hogan 2011-03-30 02:06:35
+1这适用于SQL 2000转发。但请注意,数据将以相反的顺序。为了得到正确的顺序,你需要将上面的代码封装在'SELECT * FROM()t2 ORDER BY xx ASC.' –
2011-03-30 02:47:38