2013-03-03 5 views
1

두 테이블 가이드가용성이 있습니다. 가이드은 가이드 목록이며 입니다. 가용성은 특정 가이드에 대한 정보가 알려진 날짜 목록입니다. 예 : 03/03/14 - 가이드 3 - 사용 가능 또는 05/03/14 - 가이드 1 - 통화 중. 특정 날짜에 가이드의 가용성이 아직 알려지지 않은 경우 에 해당 항목이 전혀 표시되지 않습니다. 그 날의 가용성은입니다.Access에서 쿼리 (누락 된 값 추가)

다음 3 일 동안 모든 가이드의 상태 목록을 반환하는 쿼리를 작성하고 싶습니다. 상태가 알려지지 않은 경우 알 수 없음이라고 표시됩니다.

SQL에서는이 작업을 확실히 수행 할 수 있지만 Access 2013에서 웹 응용 프로그램을 작성해야하므로 제한적입니다. 따라서 Access에서 쿼리 편집기를 사용해야합니다. 전문 지식을 가진 사람이 지침을 제공 할 수 있습니까? 질문에 불분명 한 점이 있으면 그렇게 말하십시오.

Example query output: 
03/03/2013 - Guide 1 - Busy 
03/03/2013 - Guide 2 - Unknown 
03/03/2013 - Guide 3 - Unknown 
04/03/2013 - Guide 1 - Available 
04/03/2013 - Guide 2 - Available 
04/03/2013 - Guide 3 - Unknown 
05/03/2013 - Guide 1 - Unknown 
05/03/2013 - Guide 2 - Unknown 
05/03/2013 - Guide 3 - Unknown 

Table: Guides 
Guide 1 
Guide 2 
Guide 3 

Table: Availability 
03/03/2013 - Guide 1 - Busy 
04/03/2013 - Guide 1 - Available 
04/03/2013 - Guide 2 - Available 

P.S : 누군가가 내가 앞으로 10 년 동안 모든 날짜를 나열 세 번째 테이블을해야 할 수도 있습니다 제안했다. 이것은 솔루션에 도움이된다면 문제가되지 않습니다.

+0

2010 년 3 월 5 일자로 행에 어떤 데이터 소스를 사용합니까? 그 날짜는 어느 쪽 테이블에도 존재하지 않지만 어딘가에서 왔음에 틀림 없습니다. 날짜별로 행이 하나씩있는 별도의 캘린더 테이블이 있습니까? 그렇지 않다면, 당신은 그것을 기꺼이 만들겠습니까? – HansUp

+0

가이드와 사용 가능 테이블간에 관계가 있습니까? – DevelopmentIsMyPassion

+0

@HansUp 필요한 경우 긴 날짜 목록이있는 테이블을 만드는 데 신경 쓰지 않습니다. 그러나 그것은 가능하다면 두 번째 쿼리로 수행하는 것을 선호합니다. –

답변

1

액세스가 제한적인 경우 재귀 CTE를 사용할 수 없습니다 (해당되는 경우 Google에서 해당 항목을 찾을 수 있습니다).

따라서 모든 날짜의 테이블을 만들어야합니다. 테이블이 AllDates이고 날짜 필드가 Dte 인 경우 쿼리는 다음과 같이 표시됩니다 (반환 된 행 수를 제한하려면 날짜 범위별로 필터링해야합니다. 그렇지 않으면 10 년 동안의 레코드가 모두 표시됩니다) :

SELECT Availability.Dte, Availability.Guide, Availability.Status 
FROM Availability INNER JOIN Guides ON Availability.Guide = Guides.Guide 
UNION ALL 
SELECT AllDates.Dte, Guides.Guide, 'Unknown' AS Status 
FROM AllDates, Guides 
WHERE NOT EXISTS (SELECT 1 FROM Availability WHERE Availability.Dte = AllDates.Dte And Availability.Guide = Guides.Guide) 
ORDER BY 1, 2; 

웹 버전의 Access의 경우 2 개의 쿼리를 사용해야합니다. 첫 번째 (DatesGuides)는 모든 날짜에 대해 모든 가이드를 나열됩니다, 그 구문으로 간단하다 : 두 번째 쿼리는 첫 번째와 결합 남아있을 것입니다

SELECT Guides.Guide, AllDates.Dte 
FROM AllDates, Guides; 

. 구문은 다음과 같습니다.

SELECT DatesGuides.Dte, DatesGuides.Guide, Nz([Status],'Unknown') AS Expr1 
FROM Availability RIGHT JOIN DatesGuides ON Availability.Dte = DatesGuides.Dte AND Availability.Guide = DatesGuides.Guide; 
+0

고맙습니다. 시각적 쿼리 편집기로 변환하는 것이 얼마나 쉬운 지 모르겠습니다. 문제는 SQL 입력 상자를 열 수도없고, 다음과 같은 시스템에서 모든 것을해야한다는 것입니다. http://blogs.office.com/resized-image.ashx/__size/550x0/__key /CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-53/7752.QueryAccess.png). 물론 확실히 갈 것입니다. –

+0

그리고 이와 같은 시스템에는 "보기"버튼이 있어야하는데, 여기에는 "SQL"을 포함한 몇 가지 옵션이 있습니다. – cha

+0

나는 그렇지 않습니다. 데스크톱 데이터베이스를 사용하면 Access 2013 Web Apps는 완전히 비활성화됩니다. –