2016-08-22 8 views
0

다음 코드는 MS Access에서 제대로 작동합니다. 그러나 추가 왼쪽 조인을 추가하려고합니다. 내 왼쪽 조인은 테이블이 아닌 쿼리에 참여합니다.다중 조인 왼쪽에 액세스/하위 쿼리 조인

희망적입니다.

SELECT 
    a.[business unit], 
    b.[Total Colleagues in DMS], 
    Sum(IIf([a].[Session Date] Is Not Null,1,0)) AS [Total Bookings], 
    Sum([a.Has Booking been cancelled (Yes/No)]) AS [Total Cancellations], 
    (Sum(IIf([a].[Session Date] Is Not Null,1,0))-Sum([a.Has Booking been cancelled (Yes/No)])) AS [Net Bookings], 
    Sum([a.lookup_attended]) AS Attended, 
    (b.[Total Colleagues in DMS]-(Sum(IIf([a].[Session Date] Is Not Null,1,0))-Sum([a.Has Booking been cancelled (Yes/No)]))) AS [Unbooked Spaces] 
FROM 
    everything AS a 
LEFT JOIN 
(
    SELECT 
     a.[business unit], count(*) AS [Total Colleagues in DMS] 
    FROM 
    (
     SELECT DISTINCT 
      a.lookup_id, 
      A.[BUSINESS UNIT] 
     FROM 
      EVERYTHING AS a 
     WHERE 
      (a.status<>"leaver" Or a.status<>"Not in scope") 
      And 
      A.PROJECT Is Null 
    ) AS [%$##@_Alias] 
    GROUP BY 
     a.[business unit] 
) AS b 
ON 
    a.[business unit] = b.[business unit] 
WHERE 
(
    ((a.status)<>"leaver" Or (a.status)<>"not in scope")  
GROUP BY 
    a.[business unit], 
    b.[Total Colleagues in DMS], 
    b.[business unit]; 
+0

는 당신이 필요로하는 각 ON 절 후 예를 들어 질문 할 때 자세한 정보를 제공합니다. 검색어의 이름은 무엇입니까? 가입을 원하십니까? 나열된 기존 테이블과 어떤 관련이 있습니까? 이 쿼리를 추가하면 합계가 해제 될 수 있기 때문에 조인과 다른 테이블 간의 차이점은 무엇입니까? – xQbert

+0

그것에 대해 어떻게 작동하지 않습니까? SQL을 다시 포맷 한 후에는 WHERE 문에')'이 없습니다. 구문 오류가 발생 했습니까? 정확한 오류 메시지를 게시 할 수 있습니까? –

+0

테이블은 참으로 쿼리 (파생 테이블, VIEW, 저장된 쿼리 개체) 일 수 있습니다. 세 번째 테이블에 가입하려면 처음 두 테이블을 괄호 안에 넣어야합니다. 'SELECT * FROM (T1 JOIN T2 ON T1.id = T2.id) JOIN T3 ON T1.id = T3.id' (옵티 마이저가 지정된 순서를 따르지 않아도됨을 지적). – onedaywhen

답변

0

귀하의 질문이 명확하지 않은 도움을 주셔서 감사합니다,하지만 MS 액세스 + 추가 LEFT는 날 당신의 주요 문제는 당신이 추가 LEFT 쿼리에 가입했다 있다는 것을 생각하게 가입하는 당신은 위에서 보여주지 않았고, 하나 이상의 JOIN이있는 경우 MS ACCESS SQL에 필요한 괄호로 테이블을 둘러 쌀 수 없다는 것을 의미합니다. 어느 쪽이 잘못 했니?

내가 잘못 잘못 되었다면 문제가 무엇인지 더 자세히 설명해야합니다.

그래서이 작업은하지 않을 :

SELECT 
    a.[business unit], 
    b.[Total Colleagues in DMS], 
    Sum(IIf([a].[Session Date] Is Not Null,1,0)) AS [Total Bookings], 
    Sum([a.Has Booking been cancelled (Yes/No)]) AS [Total Cancellations], 
    (Sum(IIf([a].[Session Date] Is Not Null,1,0))-Sum([a.Has Booking been cancelled (Yes/No)])) AS [Net Bookings], 
    Sum([a.lookup_attended]) AS Attended, 
    (b.[Total Colleagues in DMS]-(Sum(IIf([a].[Session Date] Is Not Null,1,0))-Sum([a.Has Booking been cancelled (Yes/No)]))) AS [Unbooked Spaces] 
FROM 
    everything AS a 
LEFT JOIN 
(
    SELECT 
     a.[business unit], count(*) AS [Total Colleagues in DMS] 
    FROM 
    (
     SELECT DISTINCT 
      a.lookup_id, 
      A.[BUSINESS UNIT] 
     FROM 
      EVERYTHING AS a 
     WHERE 
      (a.status<>"leaver" Or a.status<>"Not in scope") 
      And 
      A.PROJECT Is Null 
    ) AS [%$##@_Alias] 
    GROUP BY 
     a.[business unit] 
) AS b 
ON 
    a.[business unit] = b.[business unit] 
LEFT JOIN your_query AS q ON q.whatever=a.whatever  

WHERE 
(
    ((a.status)<>"leaver" Or (a.status)<>"not in scope")  
GROUP BY 
    a.[business unit], 
    b.[Total Colleagues in DMS], 
    b.[business unit]; 

하지만이 작동합니다

SELECT 
    a.[business unit], 
    b.[Total Colleagues in DMS], 
    Sum(IIf([a].[Session Date] Is Not Null,1,0)) AS [Total Bookings], 
    Sum([a.Has Booking been cancelled (Yes/No)]) AS [Total Cancellations], 
    (Sum(IIf([a].[Session Date] Is Not Null,1,0))-Sum([a.Has Booking been cancelled (Yes/No)])) AS [Net Bookings], 
    Sum([a.lookup_attended]) AS Attended, 
    (b.[Total Colleagues in DMS]-(Sum(IIf([a].[Session Date] Is Not Null,1,0))-Sum([a.Has Booking been cancelled (Yes/No)]))) AS [Unbooked Spaces] 
FROM 
    ((everything AS a 
LEFT JOIN 
(
    SELECT 
     a.[business unit], count(*) AS [Total Colleagues in DMS] 
    FROM 
    (
     SELECT DISTINCT 
      a.lookup_id, 
      A.[BUSINESS UNIT] 
     FROM 
      EVERYTHING AS a 
     WHERE 
      (a.status<>"leaver" Or a.status<>"Not in scope") 
      And 
      A.PROJECT Is Null 
    ) AS [%$##@_Alias] 
    GROUP BY 
     a.[business unit] 
) AS b 
ON 
    a.[business unit] = b.[business unit]) 
LEFT JOIN your_query AS q ON q.whatever=a.whatever) 

WHERE 
(
    ((a.status)<>"leaver" Or (a.status)<>"not in scope")  
GROUP BY 
    a.[business unit], 
    b.[Total Colleagues in DMS], 
    b.[business unit]; 

공지 사항을 FROM과 오른쪽 괄호 후 왼쪽 괄호