1

I want to automize a SQL query in MS Access. I am new to vba and it would be great if someone can help me with my problem:

I need to generate a list for my company with each employee who has worked for a specific team. Each team gets a list that includes the working hours that have been done for a specific project. Here is the sql-code for one team:

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

As you can see, I have multiple queries which I unite using the UNION. I want to reduce these queries using a loop for one single sql with the employee as a variable and loop through all employees. Any ideas?

1 Answer 1

1

You can simply use the IN condition instead of '='.

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

Your code was hard to read, so I hope I saw all the differences between those 3 queries ('HBI','LBR','PJO')? BTW - you use a lot of unnecessary '()'

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.