我想在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与雇员作为变量并循环遍历所有员工。有什么想法吗?
答案 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')? 顺便说一句 - 你使用了很多不必要的'()'