2016-06-21 13 views
0

Ich habe einen Tisch. Es ist verknüpft (kein Primärschlüssel) namens "spcDB". Ich muss 12 Datensätze je nach "Bereich" und "Standort" Spalte zufällig auswählen. Der Bereich hat zwei Zahlenwerte: "211" und "231". Ich muss 8 - "211" und 4 - "231" Datensätze auswählen. Jeder Wert von "Standort" ist einzigartig.Wählen Sie zufällige Datensätze

Ich schrieb dieses VBA-Code (moduleOne):

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

..und meine SELECTs wie .. sieht

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); 

Erstes 8 Paar von Standorten und 211 Bereiche erzeugen. Zweite 4 Loc + 231 Bereiche. Meine Frage ist, wie man diese zwei Auswahlen zu einem kombiniert?

+1

Put-UNION zwischen ihnen ALL –

Antwort

2

Ihre Abfrage verwendet dieselbe Sequenz, wenn Sie Access schließen und erneut öffnen. dies zu vermeiden, eine zeitabhängige Samen Rnd hinzufügen die für jede eindeutige ID ändert:

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) 
Verwandte Themen