Если в вашей таблице было UniqueID
, где COUNT(UniqueID)
было больше 1 (на UniqueID
), то UniqueID не было уникальным , поэтомуСтолбцы TotalCount
и total_count
в вашем запросе должны возвращать одинаковые значения.
Чтобы отфильтровать первые 10 процентов (или не менее 20) ваших записей, вы можете вычислить случайное число строк (используя NEWID()
) и примените к нему фильтр (включая общее количество записей).Как номер строки, так и общее количество записей можно рассчитать, используя оконные функции (с предложением OVER), но поскольку эти функции нельзя использовать в предложении WHERE (они предоставляют дополнительную информацию после обычногонабор результатов был сгенерирован), вычисление должно выполняться в подзапросе (который может быть записан как CTE).Я предлагаю попробовать это так:
WITH
cte AS (
SELECT UniqueID,
RowNumber = ROW_NUMBER() OVER (ORDER BY NEWID()),
MaxNumber = COUNT(*) OVER ()
FROM YourTable
)
SELECT UniqueID
FROM cte
WHERE RowNumber <= MaxNumber/10 OR RowNumber <= 20;
Если вам нужно округлить 10% -ное значение для дробных значений (как это делает TOP x PERCENT), попробуйте альтернативное предложение WHERE:
WHERE RowNumber <= (MaxNumber+9)/10 OR RowNumber <= 20;