2015-02-06 4 views
0

나는 이것에 대한 답을 찾으려고 노력했지만 찾지 못했습니다.마이크로 소프트 액세스를위한 cte 변경

데이터베이스의 2 개 데이터 테이블과 관련된 SQL 쿼리에 CTE가 있습니다. 한 테이블의 기본 키는 다른 테이블의 외래 키이며 두 번째 테이블에 여러 번 나타날 수 있습니다. 각 외래 키가 두 번째 테이블에 나타나는 횟수를 계산하고이를 첫 번째 테이블의 세부 정보와 함께 내 검색 결과의 전체 필드로 나열합니다. CTE가 Access에서 작동하지 않기 때문에 조인에서 하위 선택을 사용하도록 조정했으나 여전히 액세스시 CTE가 마음에 들지 않습니다. 여기

여기
WITH CliPol (ClientRef, Plans) AS (SELECT ClientRef, COUNT(ClientRef) AS Plans FROM Policies GROUP BY ClientRef) 
SELECT Clients.Surname, Clients.Forenames, Clients.Title, CliPol.Plans AS [No. of plans] 
FROM Clients LEFT JOIN CliPol ON Clients.ClientRef = CliPol.ClientRef 
ORDER BY Surname, Forenames; 

내 CTE

입니다 그리고 여기 내 조정 된 쿼리 테이블

CREATE TABLE [dbo].[Clients](
    [ClientRef] [int] NOT NULL, 
    [Surname] [varchar](40) NULL, 
    [Forenames] [varchar](50) NULL, 
    [Title] [varchar](40) NULL, 
CONSTRAINT [CLIE_ClientRef_PK] PRIMARY KEY CLUSTERED 
(
    [ClientRef] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Policies](
    [PolicyRef] [int] NOT NULL, 
    [ClientRef] [int] NULL, 
CONSTRAINT [POLI_PolicyRef_PK] PRIMARY KEY CLUSTERED 
(
    [PolicyRef] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

의 기본적인 부분입니다.

SELECT Clients.ClientRef, Clients.Surname, Clients.Forenames, Clients.Title , Plans.NoPlans 
FROM Clients 
LEFT JOIN 
    (SELECT ClientRef, COUNT(ClientRef) AS NoPlans FROM Policies GROUP BY ClientRef) 
    AS Plans ON Plans.ClientRef = Clients.ClientRef 
ORDER BY Clients.Surname, Clients.Forenames 

불행하게도 액세스 오류 # 3131를 던져, "에 구문 오류 FROM 절에서"내가 그 쿼리를 실행하려고.

누구나 내가이 작품을 어떻게 Access에서 만들 수 있는지 알고 있습니까?

+0

을 사용하는 것입니다? 조인 절의 열 순서 변경 시도 ('Clients.ClientRef = Plans.ClientRef') –

+1

Access에서 하위 쿼리 접근 방식을 좋아하지 않는다고 말하면 오류 메시지가 표시되어 불만을 나타냅니다. – HansUp

+0

안녕하세요, 죄송합니다. 예, FROM 절에 구문 오류가 있음을 알려줍니다 (오류 3131). – welshsteve147

답변

1

하나의 대체 방법은 DCOUNT() 도메인 집계 함수는 점점 어떤 오류

SELECT 
    Clients.ClientRef, 
    Clients.Surname, 
    Clients.Forenames, 
    Clients.Title , 
    DCount("ClientRef", "Plans", "ClientRef=" & Clients.ClientRef) AS NoPlans 
FROM Clients 
ORDER BY Clients.Surname, Clients.Forenames