2016-06-21 145 views
0

我有一张桌子。它被链接(没有主键)称为“spcDB”。我需要根据“区域”和“位置”列随机选择12条记录。该地区有两个数字值:“211”和“231”。我需要选择8 - “211”和4 - “231”记录。 “位置”的每个值都是唯一的。选择随机记录

我写了这个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区域。 我的问题是如何将这两个选择合并为一个?

+1

放UNION它们之间的所有: 为了避免这种情况,添加时间相关的种子这对于每一个独特的ID改变赛第一轮

回答

2

如果您关闭并重新打开Access,则您的查询将使用相同的顺序。

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)