2013-01-04 2 views
1

이전 Paradox를 대체하기 위해 Access 2010 데이터베이스를 만들고 있습니다. 이제는 쿼리를 사용하고 SQL에 익숙하지 않은 숨어있는 부분이 없습니다.계산 된 필드로 날짜 결합 쿼리

그래프에서 사용할 쿼리를 설정하려고합니다. 그래프의 Y 축은 통과 된 단순 비율이고 X 축은 특정 일입니다. 그래프는 양식로드 및 이후 날짜()와 날짜() - 30 "(30 일, 롤링)의 날짜 범위로 입력 된 새 레코드에 작성됩니다.

내가 작업하고있는 데이터베이스는 여러 번 통과하면서 여러 번 검사 할 수 있으며 여러 번 실패 할 수 있습니다. 각 검사는 별도의 기록입니다.

예를 들어, 2012 년 11 월 26 일에 7 가지 검사가 수행되었습니다. 5 회 통과하고 2 회 실패, 71 % ((5/7) * 100 %) 승인. "11/26/2012"및 "71 %"는 그래프의 데이터 요소를 나타냅니다. 2012 년 11 월 27 일에 8 회의 검사가 수행되었습니다. 4 회 통과하고 4 회 실패, 50 % 승인. "- 2012년 11월 27일 2012년 11월 26일 :"여기

은 필드 "날짜"날짜 범위의 "처분"에 쿼리의 예입니다

SELECT Inspection.Date, Inspection.Disposition 
FROM Inspection 
WHERE (((Inspection.Date) Between #11/26/2012# And #11/27/2012#) AND ((Inspection.Disposition)="PASS" Or (Inspection.Disposition)="FAIL")); 

Date  | Disposition 
11/26/2012 | PASS 
11/26/2012 | FAIL 
11/26/2012 | FAIL 
11/26/2012 | PASS 
11/26/2012 | PASS 
11/26/2012 | PASS 
11/26/2012 | PASS 
11/27/2012 | PASS 
11/27/2012 | PASS 
11/27/2012 | FAIL 
11/27/2012 | PASS 
11/27/2012 | FAIL 
11/27/2012 | PASS 
11/27/2012 | FAIL 
11/27/2012 | FAIL 

* 참고 - 날짜 필드의 유형이 "날짜"이고 처분 필드의 유형이 "텍스트"입니다. 검사가 수행되지 않는 날이 있으며 요즘은 그래프에 표시되지 않습니다. 검사 처분은 "NA"로도 표시 될 수 있으며, 이는 그래프로 표시되지 않는 다른 유형의 검사를 나타냅니다. 여기

내가 다른 쿼리에서 생성 할 레이아웃입니다 (범위의 간결함을 위해, 다시 한번, 단 2 일간) : 내가 할 수있는 요구를 어떻게 생각

Date  | # Insp | # Passed | # Failed | % Acceptance 
11/26/2012 | 7  | 5  | 2  | 71 
11/27/2012 | 8  | 4  | 4  | 50 

는 기록에 조인의 몇 가지 유형 나머지 쿼리 결과에서 "계산 된 필드"와 자체 날짜. 문제는 입니다. 날짜별로 레코드를 "평평하게"하는 방법을 찾지 못했고 검사 횟수와 통과 횟수를 하나의 쿼리에서 모두 유지 관리했습니다. 이에 대해 여러 개의 계층화 된 쿼리가 필요합니까? 이 숫자의 유일한 용도는 그래픽 형식이므로 테이블로 쿼리를 저장하지 않는 것이 좋습니다.

나는 PASS "1"과 FAIL "0"을 할당함으로써 Texture 인 "Disposition"필드를 얻기 위해 데이터베이스에 새로운 컬럼을 만들 것을 생각하고 있었지만, 이것은 cop out과 같습니다. SQL에서이 작업을 수행하는 방법이 있어야합니다. 단지 적용 가능한 예제를 찾지 못했습니다.

도움 주셔서 감사합니다. 모든 입력 또는 제안을 부탁드립니다! 양식, 쿼리 및 그래프가 포함 된 예제 데이터베이스도 유용합니다!

답변

0
당신은 그룹 Date에 의해 수 있으며, 그 그룹에 대한 통계를 계산하는 sumcount 같은 집계를 사용

:

트릭을 할 것으로 보인다
select Date 
,  count(*) as [# Insp] 
,  sum(iif(Disposition = 'PASS',1,0)) as [# Passed] 
,  sum(iif(Disposition = 'FAIL',1,0)) as [# Failed] 
,  100.0 * sum(iif(Disposition = 'PASS',1,0))/count(*) as [% Acceptance] 
from YourTable 
where Disposition in ('PASS', 'FAIL') 
group by 
     Date 
+0

! 난 그냥 옛날 수입 데이터베이스의 잔소리 문제를 통해 그것이 어리석은 증거인지 확인해야합니다. 새로운 엔트리 검증 데이터를 통해 효과가 있습니다! 고맙습니다! – Phizon

+0

카운트 (*)는 모든 레코드를 계산한다는 점에서 포괄적 인 것입니까? 카운트를 "PASS"또는 "FAIL"인 레코드로만 제한하는 인수를 전달할 수 있습니까? – Phizon

+0

당신은 그것을하기 위해'where' 절을 추가 할 수 있습니다. 또는'sum (또는 (Disposition = 'PASS', Disposition = 'FAIL'), 1,0))'은 합격과 실패에 대해서만 카운트처럼 작동합니다. – Andomar