2014-06-19 143 views
0

嗨我有一種情況,我需要連接兩個表,但從第三個表中篩選值。如下:如何避免在這種情況下使用子查詢訪問SQL

SELECT a.Key , (SELECT SUM(B.hours) FROM tableB as B 
       INNER JOIN tableC as C ON B.List=C.List 
       WHERE C.Status = 'Approved' AND B.Key LIKE A.key) , 
       (SELECT SUM(B.hours) FROM tableB as B 
       INNER JOIN tableC as C ON B.List=C.List 
       WHERE C.Status = 'Pending' AND B.Key LIKE A.key) 
FROM tableA as A GROUP BY A.key 

是否有另一種方法來做到這一點,而不使用相關的子查詢?我想使用連接,但我不知道如何將表C鏈接到這張圖片。

在此先感謝。

回答

2

子查詢可能不是一個壞主意,但你可以有條件的聚集做到這一點:

SELECT a.Key, 
     sum(iif(c.Status = "Approved", B.hours, 0)), 
     sum(iif(c.Status = "Pending", B.hours, 0)) 
FROM tableA as A left join 
    (tableB as b inner join 
     tableC as c 
     on b.list = c.list 
    ) 
    on b.key like a.key 
GROUP BY A.key; 

MS Access有神祕的語法加入,特別是對多連接。我認爲以上是正確的。

+0

謝謝戈登,我不知道訪問許可加入子表與子表。即我認爲Access只允許表A連接表B和表連接表C。不像你的答案表A連接表B,然後在裏面(表B連接表C)。我現在要試一試並回復你。 – Eddy

+0

@Tyrion。 。 。 Access *確實允許。我只是不確定我的Access語法是否正確。我傾向於避免使用Access,而寧願使用其他數據庫的免費版本。 –

+0

托架讓我很頭疼,特別是因爲我不得不加入其他桌子。但它的工作!非常感謝你。 – Eddy

相關問題