选择随机记录

时间:2016-06-21 08:41:05

标签: sql vba access-vba ms-access-2010

我有一张桌子。它被链接(没有主键)称为" spcDB"。我需要随机选择12条记录,具体取决于" area"和"位置"柱。该区域有两个数字值:" 211"和" 231"。我需要选择8 - " 211"和4 - " 231"记录。每个价值来自" location"是独特的。

我写了这个VBA代码(moduleOne):

Function Randomizer() As Integer Static AlreadyDone As Integer If AlreadyDone = False Then Randomize: AlreadyDone = True Randomizer = 0 End Function

..我的SELECT看起来像......

SELECT TOP 8 spcDB.LOC, spcDB.AREA_TYPE
FROM spcDB
WHERE randomizer() = 0 and spcDB.AREA_TYPE = "211"
ORDER BY rnd(isnull(spcDB.LOC) * 0 + 1);

SELECT TOP 4 spcDB.LOC, spcDB.AREA_TYPE
FROM spcDB
WHERE randomizer() = 0 and spcDB.AREA_TYPE = "231"
ORDER BY rnd(isnull(spcDB.LOC) * 0 + 1);

首先生成8对位置和211个区域。第二个4个地方+ 231个地区。 我的问题是如何将这两个选项组合成一个?

1 个答案:

答案 0 :(得分:2)

如果关闭并重新打开Access,您的查询将使用相同的序列。 要避免这种情况,请为 Rnd 添加一个时间相关种子,该种子会针对每个唯一ID进行更改:

public static double[] solveRealQuarticRoots(double a, double b, double c, double d, double e) {
    double s1 = 2 * c * c * c - 9 * b * c * d + 27 * (a * d * d + b * b * e) - 72 * a * c * e,
        q1 = c * c - 3 * b * d + 12 * a * e;
        s2 = s1 + Math.sqrt(-4 * q1 * q1 * q1 + s1 * s1),
        q2 = Math.cbrt(s2 / 2),
        s3 = q1 / (3 * a * q2) + q2 / (3 * a),
        s4 = Math.sqrt((b * b) / (4 * a * a) - (2 * c) / (3 * a) + s3),
        s5 = (b * b) / (2 * a * a) - (4 * c) / (3 * a) - s3,
        s6 = (-(b * b * b) / (a * a * a) + (4 * b * c) / (a * a) - (8 * d) / a) / (4 * s4);

    double[] roots = new double[4];
    for (int i = 0; i < 3; i++)
        roots[i] = -b / (4 * a) + (i > 1 ? -1 : 1) * (s4 / 2) - (i % 2 == 0 ? -1 : 1) * (Math.sqrt(s5 + (i > 1 ? -1 : 1) * s6) / 2);

    return roots;
}