2009-03-26 12 views
6

Próbuję dowiedzieć się, jak wybrać połowę rekordów, gdzie identyfikator jest zerowy. Chcę połowę, ponieważ zamierzam użyć tego zestawu wyników do aktualizacji innego pola ID. Następnie zaktualizuję resztę o inną wartość dla tego pola ID.Wybierz tylko połowę rekordów

Tak więc zasadniczo chcę zaktualizować połowę rekordów someFieldID o jeden numer, a resztę o inny numer dzieląc aktualizację zasadniczo pomiędzy dwie wartości dla someFieldID pola, które chcę zaktualizować.

Odpowiedz

11

W wyroczni można użyć REDUM psuedocolumn. Wierzę w serwer sql można użyć TOP. przykład:

select TOP 50 PERCENT * from table 
+0

Czy jest jakieś 50% dolnego progu? np. powiedzmy, że masz 100 rekordów, dolna to ostatnie 50? – PositiveGuy

+1

Skorzystaj z klauzuli "Sortuj według" –

6

można wybrać w procentach:

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

Poniższe SQL zwróci col_ids z pierwszej części tabeli.

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

Jeżeli łączna liczba col_ids jest liczbą nieparzystą wówczas dostaniesz pierwsza połowa - 1. To dlatego, że, na przykład, mamy 51 łączne rekordów, count (col_id)/2 powroty 25,5, a ponieważ nie ma rownum równego temu wynikowi, otrzymujemy wszystko równe 25 i poniżej. Oznacza to, że pozostałe 26 nie są zwracane.

Jednak nie widziałem odwrotną pracę stwierdzeniem:

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

Więc jeśli chcesz druga połowa tabeli, można po prostu zapisać pierwsze wyniki do tabeli temp, pozwala nazwać table_a. Następnie wystarczy zrobić MINUS na oryginalnym stole z tej tabeli:

SELECT col_id FROM table
MINUS
SELECT col_id FROM table_a

Mam nadzieję, że ktoś pomaga.

Powiązane problemy