2009-03-26 15 views
6

Ich versuche herauszufinden, wie die Hälfte der Datensätze, bei denen eine ID null ist, auszuwählen. Ich möchte die Hälfte, weil ich diese Ergebnismenge verwenden werde, um ein anderes ID-Feld zu aktualisieren. Dann werde ich den Rest mit einem anderen Wert für dieses ID-Feld aktualisieren.Wählen Sie nur die Hälfte der Datensätze

Also im Wesentlichen möchte ich die Hälfte der Datensätze SomeFieldID mit einer Nummer und den Rest mit einer anderen Nummer aktualisieren die Aktualisierung im Grunde zwischen zwei Werte für einigeFieldID das Feld, das ich aktualisieren möchten.

Antwort

11

In Oracle können Sie die RNOWNUM psuedolumn verwenden. Ich glaube an SQL-Server können Sie TOP verwenden. Beispiel:

select TOP 50 PERCENT * from table 
+0

Gibt es eine Art unteren 50 Prozent? wie sagen wir, Sie haben 100 Datensätze, unten wäre die letzte 50? – PositiveGuy

+1

Verwenden Sie die Order by-Klausel –

6

Sie percent wählen:

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

Die folgende SQL wird die col_ids der ersten Hälfte der Tabelle zurück.

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

Wenn die Gesamtzahl der col_ids eine ungerade Zahl ist, dann werden Sie die erste Hälfte bekommen - 1. Dies ist, weil zum Beispiel, wir 51 Einträge gesamt haben, die Zahl (COL_ID)/2 ergibt 25,5, und da es kein rownum gibt, das diesem Ergebnis entspricht, erhalten wir alles gleich 25 und darunter. Das bedeutet, dass die anderen 26 nicht zurückgegeben werden.

Ich habe jedoch nicht die umgekehrte Aussage Arbeits gesehen:

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

Also, wenn Sie die andere Hälfte der Tabelle möchten, können Sie nur die ersten Ergebnisse in eine temporäre Tabelle speichern, rufen Sie lässt es TABLE_A. Dann tun Sie nur MINUS auf dem Originaltisch aus dieser Tabelle:

SELECT col_id FROM table
MINUS
SELECT col_id FROM table_a

Hoffentlich jemand hilft.

Verwandte Themen