我有一张男性和女性的桌子。女性(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语句
答案 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()