2016-06-21 193 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)