У меня есть таблица MEN в SQL Server 2008, которая содержит 150 строк.
как я могу показать только четные или только нечетные строки?
заранее спасибо
Выезд 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
Предполагается, что в вашей таблице есть автоматически нумерованное поле "RowID", и вы хотите выбрать только записи, в которых RowID является четным или нечетным.
Показывать нечетное:
Select * from MEN where (RowID % 2) = 1
Чтобы показать даже:
Select * from MEN where (RowID % 2) = 0
БЫСТРО: Битовый вместо модуля.
select * from MEN where (id&1)=0;
Случайный вопрос: Вы действительно используете имена таблиц в верхнем регистре? Обычно прописные буквы зарезервированы для ключевых слов. (По договоренности)
запрос нечетного числа:
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
SELECT * FROM (SELECT ROW_NUMBER () OVER (ORDER BY sal DESC) row_number, sr,sal FROM empsal) a WHERE (row_number%2) = 1
и
SELECT * FROM (SELECT ROW_NUMBER () OVER (ORDER BY sal DESC) row_number, sr,sal FROM empsal) a WHERE (row_number%2) = 0
Для записи четных значений:
выберите * из www, где mod (salary, 2) = 0;
Для записи нечетных значений:
выберите * из www, гдемод (заработная плата, 2) = 0;!
Попробуйте:
нечетное:
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
select * from Tablename where id%2=0
ODD ROWS
select * from (select mod(rownum,2) as num , employees.* from employees) where num =0;
ДАЖЕ СТРОК
select * from (select mod(rownum,2) as num , employees.* from employees) where num =1;