随机选择多个记录

时间:2017-01-13 19:00:03

标签: sql-server

我有一张男性和女性的桌子。女性(PK(Id),PersonsName,IsMale)。我希望得到一个随机的名字,但两性。例如:

Select Top 1 PersonsName 
From MyTable 
Where IsMale = '1' 
Order by NewID()

Select Top 1 PersonsName 
From MyTable 
Where IsMale = '0' 
Order by NewID()

如何组合这些语句,以便从一个SQL语句返回2条记录(1个男性和1个女性名称)?

我在过去看到有人在同一个SQL查询中将两个语句分开,如下所示:

Select Top 1 PersonsName 
From MyTable 
Where IsMale = '1' 
Order by NewID();

Select Top 1 PersonsName 
From MyTable 
Where IsMale = '0' 
Order by NewID()

每次运行代码时,我希望有两个完全随机的名称而不是两个相同性别的记录,因此我可以填充数据集并将其绑定到ListView控件。我只需要SQL语句

3 个答案:

答案 0 :(得分:3)

您要找的是UNION关键字

select PersonsName from (Select TOP 1 PersonsName From MyTable Where IsMale = '1' Order by NewID()) a
UNION ALL
Select PersonsName from (Select TOP 1 PersonsName From MyTable Where IsMale = '0' Order by NewID()) b

这将返回1行结果,包含2行。

答案 1 :(得分:2)

您还可以使用Row_Number()和WITH TIES子句。这将返回其中一个。

Select Top 1 with Ties *
 From  YourTable
 Order By Row_Number() over (Partition By IsMale Order by NewID())

旁注。前4名将为您提供两个

答案 2 :(得分:0)

使用union关键字来避免相同的重复记录。 Union是一个关键字,用于编写两个sql查询,它返回具有相同列数的相同类型的记录(列名可以不同但别名对于两个查询应该相同)。

Select Top 1 PersonsName From MyTable Where IsMale = '1' Order by NewID() union Select Top 1 PersonsName From MyTable Where IsMale = '0' Order by NewID()