使用循环减少ms访问中的SQL代码

时间:2016-01-12 12:08:53

标签: sql vba ms-access

我想在MS Access中自动化SQL查询。我是vba的新手,如果有人可以帮我解决我的问题,那就太棒了:

我需要为每个为特定团队工作的员工生成我公司的列表。每个团队都会获得一个列表,其中包含已为特定项目完成的工作时间。这是一个团队的sql代码:

SELECT 
    Sum(b.Stunden) AS Gesamtstunden, 
    b.Mitarbeiter, b.Leistungen.Kostengefäss_ID, 
    Team.Teamleader, b.Positionen.Position_ID, b.Positionen.Art
FROM
    (SELECT * 
     FROM 
          (SELECT * 
           FROM Leistungen 
           INNER JOIN Kostengefässe ON Leistungen.Kostengefäss_ID = Kostengefässe.Kostengefäss_ID) AS a 
     INNER JOIN 
         Positionen ON a.Position_ID = Positionen.Position_ID) AS b 
INNER JOIN 
    Team ON b.Team_ID = Team.Team_ID
WHERE 
    (((b.Mitarbeiter) = 'HBI') AND (Team.Team_ID) = '2_RR1')
GROUP BY 
    b.Mitarbeiter, b.Leistungen.Kostengefäss_ID, Team.Teamleader, 
    b.Positionen.Position_ID, b.Positionen.Art

UNION

SELECT 
    Sum(b.Stunden) AS Gesamtstunden, 
    b.Mitarbeiter, b.Leistungen.Kostengefäss_ID, Team.Teamleader, 
    b.Positionen.Position_ID, b.Positionen.Art
FROM
    (SELECT * 
     FROM 
         (SELECT * 
          FROM Leistungen 
          INNER JOIN Kostengefässe ON Leistungen.Kostengefäss_ID = Kostengefässe.Kostengefäss_ID) AS a 
     INNER JOIN 
         Positionen ON a.Position_ID = Positionen.Position_ID) AS b 
INNER JOIN 
    Team ON b.Team_ID = Team.Team_ID
WHERE 
    (((b.Mitarbeiter) = 'LBR') AND (Team.Team_ID) = '2_RR1')
GROUP BY 
    b.Mitarbeiter, b.Leistungen.Kostengefäss_ID, Team.Teamleader, 
    b.Positionen.Position_ID, b.Positionen.Art

UNION

SELECT 
    Sum(b.Stunden) AS Gesamtstunden, 
    b.Mitarbeiter, b.Leistungen.Kostengefäss_ID, Team.Teamleader, 
    b.Positionen.Position_ID, b.Positionen.Art
FROM 
    (SELECT * 
     FROM 
         (SELECT * 
          FROM Leistungen 
          INNER JOIN Kostengefässe ON Leistungen.Kostengefäss_ID = Kostengefässe.Kostengefäss_ID) AS a 
     INNER JOIN 
         Positionen ON a.Position_ID = Positionen.Position_ID) AS b 
INNER JOIN 
    Team ON b.Team_ID = Team.Team_ID
WHERE 
    (((b.Mitarbeiter) = 'PJO') AND (Team.Team_ID) = '2_RR1')
GROUP BY 
    b.Mitarbeiter, b.Leistungen.Kostengefäss_ID, Team.Teamleader, 
    b.Positionen.Position_ID, b.Positionen.Art

如您所见,我有多个查询,我使用UNION联合起来。我希望使用一个循环来减少这些查询,将一个单独的sql与雇员作为变量并循环遍历所有员工。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您只需使用IN条件而不是'='。

SELECT Sum(b.Stunden) AS Gesamtstunden, b.Mitarbeiter, b.Leistungen.Kostengefäss_ID, Team.Teamleader, b.Positionen.Position_ID, b.Positionen.Art
FROM (SELECT * FROM (SELECT * FROM Leistungen INNER JOIN Kostengefässe ON Leistungen.Kostengefäss_ID = Kostengefässe.Kostengefäss_ID)  AS a INNER JOIN Positionen ON a.Position_ID = Positionen.Position_ID)  AS b INNER JOIN Team ON b.Team_ID = Team.Team_ID
WHERE (((b.Mitarbeiter) in('HBI','LBR','PJO')) And (Team.Team_ID)='2_RR1')
GROUP BY b.Mitarbeiter, b.Leistungen.Kostengefäss_ID, Team.Teamleader, b.Positionen.Position_ID, b.Positionen.Art

您的代码难以阅读,所以我希望我看到这3个查询之间的所有差异('HBI','LBR','PJO')? 顺便说一句 - 你使用了很多不必要的'()'