Случайный выбор, предотвращающий некоторые дубликаты - PullRequest
0 голосов
/ 23 февраля 2011

из таблицы

Name GroupID 
a      Null
b       1
c       1
d       2
e      Null
f      Null
g       3

Результат, ожидаемый от случайной выборки из 4 лучших

Name GruopID
a  Null
b   1
e  Null
g   3

Возобновление Я хочу получить случайные имена, но только 1 вид groupid, если groupid равен <> null Тип select Newid () возвращает «Выберите Top (4) * FROM Table Order By NEWID ()»

Name GruopID
a  Null
b   1
e  Null
c   1

Я не хочу этого. Надеюсь, я все прояснил! Заранее спасибо

1 Ответ

1 голос
/ 23 февраля 2011

Вы можете попробовать это (на SQL Server 2005+).

;WITH CTE AS
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY GroupId ORDER BY NEWID()) Corr
    FROM YourTable
)

SELECT TOP 4 Name, GroupId
FROM CTE
WHERE GroupId IS NULL OR Corr = 1
ORDER BY NEWID()
...