2011-02-23 99 views
0

从表随机选择防止一些重复

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是<>空 选择Newid()类型返回 “Select Top(4)* FROM Table Order by NEWID()”

Name GruopID 
a Null 
b 1 
e Null 
c 1 

我不想那样。希望我让自己清楚! 在此先感谢

+0

我认为你正在寻找的[DISTINCT](http://msdn.microsoft.com/en-us/library/aa259187%28v=sql.80%29.aspx)子句 – 2011-02-23 15:38:27

+0

你能显示您现有的查询 – msarchet 2011-02-23 15:38:46

+1

您现在使用的查询是什么? – Blorgbeard 2011-02-23 15:38:55

回答

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() 
+0

完美!谢谢 – Mac 2011-02-23 17:48:15