2012-11-12 3 views
1

MS Access 2010에 테이블이 있습니다. 다양한 작업을 완료 한 다양한 그룹에 속한 사람들을 분석하려고합니다. 내가하고 싶은 것은 각 사람이 그룹당 완료 한 작업 수의 표준 편차를 계산하는 것입니다. 의미, 내가 원하는 출력은 각 그룹에 대해, 각 사람이 한 일자리 수의 표준 편차를 구성하는 숫자를 가질 것입니다.Microsoft Access SQL STDEV 데이터 중

데이터는 다음과 같이 구성되어있다 :

OldGroup, OldPerson, JobID 

은 내가 그룹 및 사람에 의한 작업 ID의 COUNT을 할 필요가 있음을 알고있다. 나는 작업을 하위 쿼리를 만드는 시도,하지만 작동하지 않았다 :

SELECT data.OldGroup, STDEV(
    SELECT COUNT(data.JobID) 
    FROM data 
    WHERE data.Classification = 1 
    GROUP BY data.OldGroup, data.OldPerson 
) 
FROM data 
GROUP BY data.OldGroup; 

이 내가 시도 할 때부터 잘못 알고 "이 하위 쿼리에 의해 반환 될 수있는 대부분 하나 개의 레코드에서"오류를 반환 하위 쿼리를 독립 실행 형 쿼리로 실행하려면 둘 이상의 레코드를 성공적으로 반환해야합니다.

질문 : 가 어떻게이 COUNTSTDEV받을 수 있나요?

위급 한 질문 :이 질문에 대한 답은 예문에서 잘못된 구문을 수정하여 해결할 수 있습니다.

+0

하나의 항목 (STDEV) 만 반환 할 수 있지만 'GROUPING BY'라고 알려줍니다. 하위 쿼리에서'GROUP BY'를 제거하고 작동하는지 확인하십시오. – Sablefoste

+0

@SableFoste는 하위 쿼리에서 GROUP BY를 제거 할 때 Access에서 실제로 쿼리를 실행했지만 출력 결과가 정확하지 않습니다. 모든 레코드에 대해 동일한 계산으로 모든 'OldGroup'에 대한 레코드를 반환했습니다. 'STDEV'. 분명히, 다른 그룹은 동일한 표준 편차를 가져서는 안되기 때문에 분명히 뭔가 잘못되었습니다. – jdotjdot

답변

0

모든 경우에 적용되지는 않지만 약간의 전략 변경은이 문제를 해결하는 것처럼 보였습니다. SELECT 문에 하위 쿼리를 사용하는 대신 FROM에 넣고 별도의 테이블을 만듭니다. 보였다

SELECT OldGroup, STDEV(NumberJobs) AS JobsStDev 
FROM (
    SELECT OldGroup, OldPerson, COUNT(JobID) AS NumberJobs 
    FROM data 
    WHERE data.Classification = 1 
    GROUP BY OldGroup, OldPerson 
) AS TempTable 
GROUP BY OldGroup; 

는이 작업 수행에 :

같은, 내 코드는 것 같습니다.

0

"SELECT COUNT (data.JobID) ...."에 대한 최대 테이블 쿼리를 수행하십시오. 그런 다음 두 번째 쿼리에 대해 새 기본 테이블을 사용하십시오.
두 개 이상의 쿼리에서 무언가를하는 것이 더 쉽습니다.

+0

그게 내가 지금 해왔 던 것이지만,이 중 100 개를 실행해야하므로 하위 쿼리 기반 솔루션이 필요했습니다. 이 불행히도 Access (훨씬 더 제한된 SQL 기능이 있음)에 있기 때문에 쉽게 임시 테이블/변수 더미가 주위에 누락 될 수 없습니다. – jdotjdot

+0

이 코드가 VBA로 작성되면 동적으로 SQL을 작성하여 임의의 이름, 예를 들어 Guid의 테이블을 만들 수 있습니다. 그래서 테이블을 만들고, 다른 코드/사용자가 충돌하지 않도록 테이블에 고유 한 이름을 지정하고, 테이블을 완료하면 테이블을 삭제하십시오. – MatthewMartin

+0

일반적으로 (SQL Server와 마찬가지로) SQL에서 모두 똑바로 수행 할 수 있습니다. 액세스로 그렇게 할 수있는 방법이 없습니까 아니면 모두 VBA에 있어야합니까? 꼭 VBA를 만지지 마라. – jdotjdot

관련 문제