Выберите только половину записей - PullRequest
6 голосов
/ 26 марта 2009

Я пытаюсь выяснить, как выбрать половину записей, где идентификатор равен нулю. Я хочу половину, потому что я собираюсь использовать этот набор результатов для обновления другого поля идентификатора. Затем я собираюсь обновить остальные с другим значением для этого поля ID.

Так что, по сути, я хочу обновить половину записей someFieldID одним номером, а остальные - другим числом, разделяя обновление в основном между двумя значениями для someFieldID поля, которое я хочу обновить.

Ответы [ 4 ]

11 голосов
/ 26 марта 2009

В Oracle вы можете использовать псевдостолбец ROWNUM. Я считаю, что в SQL Server вы можете использовать TOP. Пример:

select TOP 50 PERCENT * from table
6 голосов
/ 26 марта 2009

Вы можете выбрать в процентах:

 SELECT TOP 50 PERCENT *fields* FROM YourTable WHERE ...
4 голосов
/ 26 марта 2009
update x set id=@value from (select top 50 percent * from table where id is null) x
1 голос
/ 18 мая 2010

Следующий SQL вернет col_ids первой половины таблицы.

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

Если общее число col_ids является нечетным числом, то вы получите первую половину - 1. Это потому, что, например, у нас всего 51 запись, count (col_id) / 2 возвращает 25,5, и поскольку нет rownum равного этому результату, мы получаем все, равное 25 и ниже. Это означает, что остальные 26 не возвращаются.

Однако я не видел, чтобы работало обратное утверждение:

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

Так что, если вы хотите вторую половину таблицы, вы можете просто сохранить первые результаты во временной таблице, назовем ее TABLE_A. Тогда просто сделайте МИНУС на исходном столе из этой таблицы:

SELECT col_id FROM table
МИНУС
SELECT col_id FROM table_a

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...