2013-07-14 10 views
6

W SQL Server, w jaki sposób wybrać wiersze 10, 20, 30, 40 itd. Gdzie RowID jest równe luki niektórych liczb całkowitych (+10). Jest 50k wierszy, więc używanie IN (1,10,20, itd.) Jest pracochłonne.WYBIERZ wiersze, które są wielokrotnością x

SELECT * FROM 'TABLENAME' WHERE RowID = 10 (+ 10) 

Odpowiedz

7

Możesz użyć modulo do tego.

SELECT * FROM `table` WHERE (`id` % 10) = 0 

SELECT * FROM `table` WHERE (`id` MOD 10) = 0 

SELECT * FROM `table` WHERE !MOD(`id`, 10) 

Każdy powinien zrobić.

+0

Dzięki, nauczyłem się, że Mod oznacza modulo, który reprezentuje pozostałą część dzielenia liczby całkowitej. Jeśli jednak wykonasz 12 MOD 10, wynikiem jest 2, a jeśli wykonasz 3 MOD 5, wynikiem będzie 0, a! MOD nie zostanie rozpoznane przez SQL. % jest poprawnym symbolem, ale nie jest właściwym operatorem dla mojej potrzeby. Dzieki za probe. –

+0

Mylisz się. 3 MOD 5 to 3. Odchodzi pozostała część podziału, dlatego gdy jego podział jest doskonały, będzie wynosił zero. n MOD 10 będzie wynosił 0 dla 10, 20, 30, 40, 50 itd. Możesz użyć tych informacji, aby dokładnie określić, które wiersze chcesz. – Havenard

+0

To był mój scotoma: http://www.tizag.com/sqlTutorial/sqloperators.php Moduł wykonuje podział, dzieląc pierwszą cyfrę przez drugą cyfrę, ale zamiast zwracania ilorazu zwracana jest wartość "pozostałej" zamiast. przypadku gdy klauzula który działa w MSSQL (mi) GDZIE (PortalID% 10 = 0) Powoduje to co 10 id wybrany GDZIE (PortalID% 50 = 0) Powoduje to co 50 wybiera identyfikator –

0

Podejrzewam, trzeba użyć operator moduł rowid mod 10 = 0. coś w tym celu.

+0

Powoduje to, że coś jest bliższe niż moje przypuszczenie, ale jeśli chcę co 100 wiersz, używam ModuleID% .01 = 0. Dividend% divisor nie ma sensu dla mnie, czego potrzebuję - co 10. wiersz zaczynając od wiersza 500 na przykład –

+0

dodaj wiersz gdzie> 499 – EvilTeach

+0

ogólnie powinien to być id mod 100, nie .01 – EvilTeach

Powiązane problemy