随机选择唯一值。

4
我们在工作中使用多个数据库,至少包括Oracle和MSSQL。不确定为什么我们需要同时使用两者,但是这个问题与MSSQL有关。
有一个表,我们称之为System..DirectMapping,其中有一个字段accountID。我不能保证它们都是数字,但它们似乎是数字。
所以我的问题实际上有两个相关部分。
首先,我必须找到一个有效的帐户ID。也就是在表中存在的ID。这很简单,但我想要随机获取一个。
因此,我执行了一个
select distinct accountID from System..DirectMapping 

虽然这种方法可以正常工作,但它们总是以相同的顺序出现。我了解到可以使用newid()来随机化某些内容,因此我尝试了一下。

 select distinct accountID from System..DirectMapping order by newid() 

但是它给了我一个错误,当选择不同的时候,order by字段必须出现在select语句中,这在这里没有意义。所以我尝试了:

 select accountID from
 (select distinct accountID from System..DirectMapping) j
 order by newid()

但是它给了我一个类似的错误,关于无法按视图中的顺序排序。最后,我只是将整个内容读入到Java数组中,并执行了Collections.shuffle(),但最好还是从查询中进行操作,因为这样我可以限制结果的数量(我认为像前10名..)。所以有没有办法这样做呢?

第二个问题我会在以后再保存。

1个回答

3

如果你使用 TOP 规范,你可以在视图中执行 ORDER BY 操作:

 select TOP 100 PERCENT accountID from
 (select distinct accountID from System..DirectMapping) j
 order by newid()

一个小建议:既然目的是选择一个随机的“accountID”,那么使用“top 1”而不是“top 100 percent”如何? - Joe Farrell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接