根据字段的计数访问每个记录的随机数

时间:2015-02-09 23:48:27

标签: ms-access

我试图为查询中的每条记录生成一个随机数。数字必须介于1和字段数之间。我试过这个

Int((0-(Count(IIf([ID]=4441,"")))+1)*Rnd()+(Count(IIf([ID]=4441,""))))

我认为它的工作除了它为每条记录提供了相同的数字。如果我Rnd([field]),它会为每条记录提供不同的数字,但这些数字介于0和1之间。如何根据我的具体标准获得两个世界中最好的数据并为每个字段获取不同的数字?< / p>

由于

1 个答案:

答案 0 :(得分:0)

“随机”会产生重复的结果,因为你没有要求独特的随机结果,这里是一个产生随机数的正确方法:

Random的正确语法是:

Int ((upperbound - lowerbound + 1) * Rnd + lowerbound)

在你的情况下

Exp: Int(((total) - 0 +1) * Rnd + 0)

在此处阅读更多内容:http://www.techonthenet.com/access/functions/numeric/rnd.php

修改

所以我做了一些游戏并带来了这个:

Select T1.ID,
(SELECT top 1 Int((count(*)-0+1)*Rnd()+0) From tbl_table as T2 where T2.ID = T1.ID)
From tbl_Table as T1

或在您的模块中创建一个公共函数: 像这样的东西:

Public Function GET_RAND(i As Long, UV As Long, LV As Long) As Long
    'i is no where used it just forces access to process this function rather than getting the result from cache
    GET_RAND = Int((UV - LV + 1) * Rnd + LV)
End Function

并在查询中访问它,如下所示:

SELECT T1.id, get_rand([id],(select count(*) from tbl_table),0) AS Expr1
FROM tbl_table AS T1;

对我来说,这是没用的,除非我不关心重复的结果。也许您可以添加更多代码并使其更适合您的需求