2009-03-26 25 views
6

Sto cercando di capire come selezionare metà dei record in cui un ID è nullo. Voglio la metà perché userò quel set di risultati per aggiornare un altro campo ID. Quindi aggiornerò il resto con un altro valore per quel campo ID.Selezionare solo metà dei record

Quindi, in sostanza, voglio aggiornare metà dei record someFieldID con un numero e il resto con un altro numero dividendo l'aggiornamento fondamentalmente tra due valori per someFieldID il campo che voglio aggiornare.

risposta

11

In oracolo è possibile utilizzare la psuedocolumn di ROWNUM. Credo in SQL Server che puoi usare TOP. Esempio:

select TOP 50 PERCENT * from table 
+0

C'è una specie di 50% in meno? come diciamo che hai 100 record, il fondo sarebbe l'ultimo 50? – PositiveGuy

+1

Utilizzare la clausola Order by –

6

È possibile selezionare per cento:

SELECT TOP 50 PERCENT *fields* FROM YourTable WHERE ... 
1

Il seguente SQL restituirà i col_ids della prima metà del tavolo.

SELECT col_id FROM table 
WHERE rownum <= (SELECT count(col_id)/2 FROM table); 

Se il numero totale di col_ids è un numero dispari, allora si otterrà il primo semestre - 1. Questo perché, per esempio, abbiamo 51 record totali, il conteggio (col_id)/2 restituisce 25,5, e poiché non c'è rown uguale a questo risultato, otteniamo tutto uguale a 25 e sotto. Ciò significa che gli altri 26 non vengono restituiti.

Tuttavia, non ho visto il lavoro dichiarazione inverso:

SELECT col_id FROM table 
WHERE rownum > (SELECT count(col_id)/2 FROM table); 

Quindi, se si desidera che l'altra metà del tavolo, si può solo memorizzare i primi risultati in una tabella temporanea, consente di chiamare TABLE_A. Poi basta fare MENO sul tavolo originale da questa tabella:

SELECT col_id FROM table
MENO
SELECT col_id FROM table_a

Speriamo che questo aiuta qualcuno.

Problemi correlati