2016-08-22 10 views
0

次のコードはMS Accessで正常に機能します。しかし、さらに左の結合を追加しようとしています。私の左の結合は、テーブルではなくクエリに参加します。複数の結合が左にアクセス/サブクエリを結合します

希望はこれが理にかなっています。

ご質問は明確ではないが、のMS Access + 追加LEFTはを登録しよう

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、ストアドクエリオブジェクト)です。 3番目のテーブルに参加するには、最初の2つを括弧で囲む必要があります。 'SELECT * FROM(T1 JOIN T2 ON T1.id = T2.id)JOIN T3 ON T1.id = T3.id'(オプティマイザは指定された順序を守る必要はないことに注意してください)。 – onedaywhen

答えて

0

助けに感謝は私があなたの主な問題は、あなたが追加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と右括弧の後に左括弧

関連する問題