2010-06-08 18 views
19

Ho una tabella MEN in SQL Server 2008 che contiene 150 righe.come mostrare solo le righe pari o dispari in sql server 2008?

come posso mostrare solo le righe pari o solo dispari?

grazie in anticipo di

+1

Pari o anche secondo quali criteri? Potresti voler dire A, C, E, ... o B, D, F, ecc.O vuoi dire indice di riga secondo la clausola ORDER BY ... ma poi cosa ordineresti? – gbn

risposta

17

Partenza 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 
+0

Sì, non ho avuto la possibilità di creare una query prima di postarla ... ma ho esteso la mia risposta. –

11

Assumendo che il tavolo ha campo auto-numerate "RowID" e si desidera selezionare solo i record in cui RowID è pari o dispari.

Per mostrare dispari:

Select * from MEN where (RowID % 2) = 1 

Per mostrare anche:

Select * from MEN where (RowID % 2) = 0 
+4

Non puoi mai assumere spazi vuoti! Verranno registrati record e transazioni annullate. – HLGEM

+0

Mai dire mai. A volte puoi. Ad esempio se hai una tabella di definizione statica. Ma la domanda non è chiara per assumere qualsiasi cosa, quindi hai ragione. –

2

Prova questa:

dispari:

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

anche:

select * from( 
SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 DESC) AS 'RowNumber', 
FROM table1 
) d where (RowNumber % 2) = 0 
1
SELECT * 
    FROM 
    ( 
    SELECT rownum rn, empno, ename 
    FROM emp 
) temp 
    WHERE MOD(temp.rn,2) = 1 
0
select * from Tablename 
where id%2=0 
0

seguito è per andare a prendere numero pari :: Select * from MEN dove Men_ID% 2 = 0;

Il seguente è per il recupero del numero dispari :: Selezionare * da MEN dove Men_ID% 2! = 0;

Qui MEN è il nome_tabella Men_ID è la colonna nella tabella MEN.

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

e

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

per valori di registrazione:

select * from www dove mod (stipendio, 2) = 0;

Per i valori dispari cronaca:!

select * from www dove mod (stipendio, 2) = 0;

3

PIÙ VELOCE: Bitwise anziché modulo.

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

Domanda casuale: Utilizzi effettivamente nomi di tabelle maiuscole? Solitamente le lettere maiuscole sono riservate per le parole chiave. (Per convenzione)

3

dispari interrogazione numero:

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

anche interrogazione numero:

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