Пример использования master..spt_values
- настроить в соответствии с таблицей
select a.*
from
(
select *,
rn=ROW_NUMBER() over (partition by type order by newid()),
COUNT(*) over (partition by type) countPerType
from master..spt_values
) a
where rn <= ceiling(countPerType*10.0/100)
Основной механизм состоит в подсчете количества строк на раздел (клиент) в одном окне, а в другом - row_number в каждомразделять и захватывать только там, где произведенная нумерация строк находится в пределах требуемого диапазона 10%.ПОТОЛОК используется для того, чтобы при выборке 2 10% составляло 0,2, что округляется до 1, поэтому вы всегда получаете> = 10% записей.