Я не знаю, что это можно сделать очень легко одним SQL. С T-SQL или аналогичным, вы можете написать цикл для дублирования строк или использовать SQL для генерации инструкций для выполнения дублирования строк.
Я не знаю вашу вероятностную модель, но вы могли бы использовать такой подход для достижения последней. Учитывая эти определения таблицы:
RowSource
---------
RowID
UserRowProbability
------------------
UserId
RowId
FrequencyMultiplier
Вы можете написать запрос, подобный этому (специфично для SQL Server):
SELECT TOP 100 rs.RowId, urp.FrequencyMultiplier
FROM RowSource rs
LEFT JOIN UserRowProbability urp ON rs.RowId = urp.RowId
ORDER BY ISNULL(urp.FrequencyMultiplier, 1) DESC, NEWID()
Это позаботится о выборе случайного набора строк, а также о том, сколько должно быть повторено. Затем в логике приложения вы можете выполнить дублирование строк и перемешать результаты.