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)

+2

+1。这个双“顶”模式始终有效。 – RollingBoy 2011-03-30 01:56:38

+1

一个有趣的+1,不包括@RollingBoy的投票。 – Hogan 2011-03-30 02:06:35

+0

+1这适用于SQL 2000转发。但请注意,数据将以相反的顺序。为了得到正确的顺序,你需要将上面的代码封装在'SELECT * FROM()t2 ORDER BY xx ASC.' – 2011-03-30 02:47:38

WITH mytable AS 
(
    SELECT *, 
    ROW_NUMBER() OVER (order by colname) AS 'RowNumber' 
    FROM table 
) 
SELECT * 
FROM myTable 
WHERE RowNumber BETWEEN 20 AND 60; 
+0

感谢法眼,但我想这个早了,我得到这个错误 'ROW_NUMBER' 不是可以识别的函数名。 – neolaser 2011-03-30 01:51:15

+1

@neolaser - 你使用的是什么版本的sql server? – Hogan 2011-03-30 01:52:59

+2

我相信ROW_NUMBER是在SQL Server 2005中引入的.OP没有指定正在使用的SQL Server版本 – 2011-03-30 02:01:17

在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>