2016-06-21 3 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 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 ALL между ними –

ответ

2

Ваш запрос будет использоваться в той же последовательности, если вы закрываете и повторно открываете доступ. Чтобы избежать этого, добавьте зависимое семя времени для Rnd который изменяет для каждого уникального идентификатора:

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) 
Смежные вопросы