如何避免在这种情况下使用子查询访问SQL

如何避免在这种情况下使用子查询访问SQL,sql,ms-access-2007,Sql,Ms Access 2007,嗨,我遇到了这样一种情况,我需要连接两个表,但要从第三个表中筛选值。详情如下: 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

嗨,我遇到了这样一种情况,我需要连接两个表,但要从第三个表中筛选值。详情如下:

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链接到这张图片中


提前谢谢

子查询可能不是一个坏主意,但您可以通过条件聚合实现这一点:

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对连接有着神秘的语法,特别是对于多个连接。我认为上面的说法是正确的。

谢谢Gordon,我不知道Access允许将子表与子表连接起来。ie我认为Access只允许表A连接表B和表连接表C。不喜欢你的答案表A连接表B,然后在里面(表B连接表C)。我现在就去试试,然后再给你打电话。@Tyrion。访问确实允许它。我只是不确定我的访问语法是否正确。我倾向于避免访问,更喜欢其他数据库的免费版本。括号让我头疼,尤其是当我不得不加入其他表时。但是成功了!。非常感谢你。