2016-06-21 3 views
0

테이블이 하나 있습니다. "spcDB"라는 링크 (기본 키 없음)입니다. 나는 "지역"과 "위치"란에 따라 무작위로 12 레코드를 선택해야합니다. 이 영역에는 두 개의 숫자 값 ("211"및 "231")이 있습니다. 나는 8 - "211"과 4 - "231"레코드를 선택해야합니다. "location"의 모든 값은 고유합니다.임의의 레코드 선택

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 개) 영역을 생성

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

.. 그리고 내 SELECT들 모습 .. :

나는이 VBA 코드 (moduleOne)를 썼다. 두 번째 4 loc + 231 영역. 제 질문은이 두 선택을 하나로 결합하는 방법입니다.

+1

풋 UNION : 모든 고유 ID에 대한 변경 이러한 문제가 발생하지 않도록하려면 에 한 번 따라 씨앗을 추가 RND

답변

2

액세스를 닫았다가 다시 열면 쿼리에서 동일한 순서를 사용합니다. 그 사이의 모든

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)