随机选择防止一些重复

时间:2011-02-23 15:35:26

标签: sql sql-server sql-server-2005 sql-server-2008

从表

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是<>空值 select Newid()类型返回 “选择Top(4)* FROM表顺序按NEWID()”

Name GruopID
a  Null
b   1
e  Null
c   1

我不想那样。希望我清楚自己! 提前致谢

1 个答案:

答案 0 :(得分:1)

您可以尝试此操作(在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()