2014-06-19 145 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

相关问题