如何在SQL Server 2008中仅显示偶数或奇数行?

22

我有一个包含150行的SQL Server 2008表MEN。

我该如何只显示偶数或奇数行?


1
按照什么标准是奇数还是偶数?你可能指的是A、C、E等,或者是B、D、F等。或者你是指根据ORDER BY子句的行索引...但是你会按什么排序呢? - gbn
18个回答

30

Check out ROW_NUMBER()

SELECT t.First, t.Last
FROM (
    SELECT *, Row_Number() OVER(ORDER BY First, Last) AS RowNumber 
            --Row_Number() starts with 1
    FROM Table1
) t
WHERE t.RowNumber % 2 = 0 --Even
--WHERE t.RowNumber % 2 = 1 --Odd

是的,在我发布那个回答之前,我没有机会创建一个查询...但我已经扩展了我的答案。 - Matthew Whited

14
假设您的表有自动编号字段"RowID",并且您只想选择RowID为偶数或奇数的记录。
显示奇数:
Select * from MEN where (RowID % 2) = 1
展示偶数的方法:
Select * from MEN where (RowID % 2) = 0

9
永远不要认为没有间隙!会有已删除的记录和已回滚的交易。 - HLGEM
永远不要说永远。有时候是可以的。例如,如果你有一个静态定义表格。但问题不清楚,不能假设任何东西,所以你是正确的。 - z-boss
这是一个可查询参数的过滤器吗?换句话说,如果你的列在表中被索引(例如ID列),而不是由查询计算出来,那么查询是否能够使用该索引? - Elaskanator

5

更快: 使用位运算代替取模。

select * from MEN where (id&1)=0;

随意问题:您是否实际使用大写的表名? 通常情况下,大写字母是保留给关键字的。(按惯例)

5

奇数查询:

SELECT *
  FROM   ( SELECT rownum rn, empno, ename
           FROM emp
         ) temp
  WHERE  MOD(temp.rn,2) = 1

偶数查询:

SELECT *
  FROM   ( SELECT rownum rn, empno, ename
           FROM emp
         ) temp
  WHERE  MOD(temp.rn,3) = 0

4

对于偶数值记录:

select * from www where mod(salary,2)=0;

对于奇数值的记录:

select * from www where mod(salary,2)!=0;

3
请尝试以下方式:
奇数:
select * from( 
SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 DESC) AS 'RowNumber', 
FROM table1
) d where (RowNumber % 2) = 1 

即使:

select * from( 
SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 DESC) AS 'RowNumber', 
FROM table1
) d where (RowNumber % 2) = 0

3
  SELECT * FROM (SELECT ROW_NUMBER () OVER (ORDER BY sal DESC) row_number, sr,sal FROM empsal) a WHERE (row_number%2) = 1

and

      SELECT * FROM (SELECT ROW_NUMBER () OVER (ORDER BY sal DESC) row_number, sr,sal FROM   empsal) a WHERE (row_number%2) = 0

1
SELECT *
  FROM   
  ( 
     SELECT rownum rn, empno, ename
     FROM emp
  ) temp
  WHERE  MOD(temp.rn,2) = 1

1
select * from Tablename 
where id%2=0

0
这里有一个简单明了的回答(我认为)。我正在使用TSQL2012示例数据库,并根据“HR.Employees”表中的“employeeID”返回仅偶数或奇数行。
USE TSQL2012;
GO

返回员工ID中的偶数编号:

SELECT *
FROM HR.Employees
WHERE (empid % 2) = 0;
GO

返回员工ID的奇数编号:

SELECT *
FROM HR.Employees
WHERE (empid % 2) = 1;
GO

希望这就是你在寻找的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接