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


Если я правильно понимаю, вы можете:
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());
Это круто. +1
@Gordon Linoff, запрос дает 40 записей, но мне нужно включить все данные суперсекторов в соответствии с количеством подсекторов, чтобы сделать его 40, и в исключении, если они не могут сделать 40, тогда любой должен выбрать больше. Пожалуйста, предложите. Заранее спасибо.
@hieko. . . Я думаю, что ревизия делает то, что вы хотите: равномерную выборку из супергрупп, а затем равномерную выборку из подгрупп.
Выборочные данные и желаемые результаты действительно помогут.