2010-05-11 3 views
2

보고서를 생성하는 데 사용하는 두 가지 쿼리가 있는데 문제는 보고서를 실행할 때 세 가지 필드가 어떤 이유로 모든 데이터를 표시하지 않는다는 것입니다.보고서에 데이터가 표시되지 않거나 "하위 쿼리에 허용되지 않은 다중 레벨 GROUP BY 원인"오류가 발생합니다.

쿼리 1 :

SELECT ClientSummary.Field3 AS PM, 
     ClientSummary.[Client Nickname 2] AS [Project #], 
     ClientSummary.[Client Nickname 1] AS Customer, 
     ClientSummary.[In Reference To] AS [Job Name], 
     ClientSummary.Field10 AS Contract, 

     (select sum([Billable Slip Value]) 
     from Util_bydate as U1 
     where U1.[Client Nickname 2] = ClientSummary.[Client Nickname 2]) 
      AS [This Week], 

     (select sum([Billable Slip Value]) 
     from Util as U2 
     where U2.[Client Nickname 2] = ClientSummary.[Client Nickname 2]) 
      AS [To Date], 

     [To Date]/[Contract] AS [% Spent], 

     0 AS Backlog, 

     ClientSummary.[Total Slip Fees & Costs] AS Billed, 
     ClientSummary.Payments AS Paid, ClientSummary.[Total A/R] AS Receivable, 

     [Forms]![ReportMenu]![StartDate] AS [Start Date], 
     [Forms]![ReportMenu]![EndDate] AS [End Date] 

FROM ClientSummary; 

질의 2 : 나는 쿼리 2에서 보고서를 실행하면

SELECT JobManagement_Summary.pm, 
     JobManagement_Summary.[project #], 
     JobManagement_Summary.Customer, 
     JobManagement_Summary.[Job Name], 
     JobManagement_Summary.Contract, 
     IIf(IsNull([This Week]),0,[This Week]) AS [N_This Week], 
     IIf(IsNull([To Date]),0,[To Date]) AS [N_To Date], [% Spent], 
     JobManagement_Summary.Backlog, 
     JobManagement_Summary.Billed, 
     JobManagement_Summary.Paid, 
     JobManagement_Summary.Receivable, 
     JobManagement_Summary.[Start Date], 
     JobManagement_Summary.[End Date] 
FROM JobManagement_Summary; 

이 3 개 필드가 표시되지 않습니다. N_This Week, N_To Date 및 % Spent. 모두 데이터가 없습니다. IIF 기능이 아닙니다. 내가 거기에있는 사람을 가지고 있거나 제거했는지는 중요하지 않습니다.

의견이 있으십니까? 첫 번째 레코드 집합에 직접 연결하면 정상적으로 작동하지만 SQL에서는 오류 메시지를 throw합니다. 다중 수준 GROUP BY 원인은 하위 쿼리에서 허용되지 않습니다.

해당 메시지를 직접 링크 할 수있는 방법이 있습니까? 아니면이 필드가 비어있는 이유를 모르는 사람이 있습니까? 나는 지혜 끝에 여기있다!

+1

쿼리 디자인 창, sql 뷰에 쿼리를 붙여 넣을 때 올바른 데이터가 표시됩니까? – Fionnuala

+0

두 쿼리 모두에 적용됩니다. – Fionnuala

+0

Remou와 (과) 동의하십시오. 또한 공백 및 문장 부호 (예 : % #/&)가 포함 된 필드 이름을 설정합니다. 이것은 문제를 야기 할 수밖에 없으며 계속하기 전에 그러한 모든 것을 제거 할 것을 제안합니다. [End Date]를 EndDate로 변경하면 공간을 없애고 Date 키워드를 사용할 위험성을 피할 수 있습니다. 더 나은 관행은 나중에 좌절과 수정 시간을 덜어줍니다. – Smandoli

답변

3

오늘 내가 동일한 문제라고 생각하는 것으로 괴롭힌 경우, 여기에 우리가 해결 한 단계를 기록해 두겠습니다. 핵심은 정렬 및 그룹화에서 사용되는 내부 GROUP BY를 구조화 할 때 Access가 기본 경로를 사용할 수 없도록하는 것입니다.

기본 문제
당신은 누구의 레코드 원본 쿼리 qryFoo하는 보고서 rptFoo 있습니다.

rptFoo에 정렬 및 그룹화를 적용 했으므로 문제가 없습니다. 그러나 qryFoo은 조금 복잡합니다. 하위 쿼리가 포함되어 있습니다.

완벽 성으로 finetune qryFoo을 조정하고 하위 쿼리 요소를 조정 및 재조정하십시오. 적어도 독립형 쿼리를 테스트 할 때 모두 멋져 보입니다. 문제는 보고서를 실행하고이 오류가 발생할 때 시작됩니다.

Multi-level GROUP BY clause is not allowed in a subquery

이것은 언급 한 문제 중 하나입니다.

해상도 시도 1 :
귀하의 첫 번째 결과 오류 구글 경우는 우수한 Allen Browne site 될 것입니다. 그는 Surviving Subqueries이라는 제목의 사이트 전체 섹션을 가지고 있습니다.

  • 서브 쿼리를 처리하는 별도의 쿼리를 만듭니다 : 가장이 특정 문제에 대한 자신의 제안 의 통행이있다. 이 쿼리 을 보고서의 기반이되는 쿼리의 원본 "테이블"로 사용하십시오. 두 번째 쿼리가 과 같이 간단하더라도 [ ] 하위 쿼리를 하위 쿼리로 이동하면 (항상은 아님) 문제가 발생하지 않습니다. SELECT * FROM Query1;

따라서 qryFooWrapper의 콘텐츠는 간단히 SELECT * FROM qryFoo입니다. 이 파일을 rptFoo의 레코드 소스로 설정하면 보고서가 오류없이로드되기 시작합니다.안타깝게도 원래 하위 쿼리의 결과 대신 빈 필드를 표시하기 만합니다.

이것은 초기 문제인 것처럼 보입니다. 우리는 막 다른 골목에 서 있습니다.

해결 시도 2 ​​:
그래서 시도하는 또 뭐가 있지, 한쪽 앨런 브라운의 제안을 떠나? 자, this discussion in Google Groups이 있습니다. 초기 제안은 거대한 kludge처럼 보입니다. 초기 쿼리에 smelly UNION ALL을 추가하십시오. 이 이 될 수 없습니다.

하지만 잠깐 기다리면 실이 약간 아래로 내려옵니다. 모든 UNION ALL이 수행하는 작업은 보고서를 보고서의 일부로 생성하는 내부 GROUP BY를 재구성하기 위해 Access에 강제 적용하는 것입니다. 그리고 원래의 qryFoo에 간단한 DISTINCT를 삽입하는 것은 동일한 일을 훨씬 덜 추악하게합니다.

그리고, 해결책, 해결책. 은 원래 쿼리에 간단한 DISTINCT를 포함합니다.. UNION ALL kludgy 아니, 끔찍한 qryFooWrapper 및 냄새 나는 임시 테이블이 없습니다.