выбрать количество записей до предела - PullRequest
0 голосов
/ 29 мая 2018

У меня есть таблица данных, как показано ниже, и я хочу обновить флаг столбца в соответствии с приведенным ниже условием.

declare @tbl table (id int identity  ,supergroup int ,subgroup int , flag char(1)  )

Цель состоит в том, чтобы получить 40 лучших записей в целом по супергруппе и подгруппе, например 40 / count (отдельная подгруппа), где supergroup = @subgroup, до 40 записей.Предположим, что есть 3 супергруппы, и если для супергруппы 1000 есть 3 отличных подгруппы, тогда извлекают 40/3 = 13 записей, и для следующей супергруппы 2000 снова есть 3 отличных подгруппы, тогда выбирают 13 записей из этого, для следующей супергруппы 3000, если есть снова 3тогда подгруппа 40/3 = 13 логика будет суммировать только 39, поэтому мне нужно 14 из последней супергруппы.

в любом сценарии, мне нужно точно 40 записей.

1 Ответ

0 голосов
/ 29 мая 2018

Если я правильно понимаю, вы можете сделать:

select top (40) t.*
from @tbl t
order by row_number() over (partition by supergroup, subgroup order by newid());

Это будет делать циклический выбор из супергрупп и подгрупп, возвращая по одной строке от каждой до получения второй строки из той же группы.

РЕДАКТИРОВАТЬ:

Если вам нужно сначала сделать циклический перебор супергрупп, то я думаю, что это будет делать это:

select top (40) t.*
from @tbl t
order by row_number() over (partition by supergroup order by subgroup, newid());

Однако, это вероятночтобы получить все результаты от одного subgroup.Давайте попробуем еще раз:

select top (40) t.*
from @tbl t
order by row_number() over (partition by supergroup order by newid()),
         row_number() over (partition by supergroup, subgroup order by newid());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...