Select 随机记录

Select random records

我有一个 table。它的链接(无主键)称为 "spcDB"。我需要根据 "area" 和 "location" 列随机 select 12 条记录。该区域有两个数值:“211”和“231”。我需要 select 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 loc + 231 个区域。 我的问题是如何将这两个 select 合二为一?

如果您关闭并重新打开 Access,您的查询将使用相同的序列。 为避免这种情况,请向 Rnd 添加一个时间相关的种子,它会随着每个唯一 ID 的变化而变化:

SELECT TOP 8
    spcDB.LOC, 
    spcDB.AREA_TYPE,
    Rnd(-Timer()*spcDB.LOC) AS [Rnd Generator] 
FROM 
    spcDB
WHERE 
    spcDB.AREA_TYPE = "211"
ORDER BY
    Rnd(-Timer()*spcDB.LOC)

UNION ALL

SELECT TOP 4
    spcDB.LOC, 
    spcDB.AREA_TYPE,
    Rnd(-Timer()*spcDB.LOC) AS [Rnd Generator] 
FROM 
    spcDB
WHERE 
    spcDB.AREA_TYPE = "231"
ORDER BY
    Rnd(-Timer()*spcDB.LOC)