使用内部联接作为联合查询的查询条件

Using an Inner Join as a Query criteria on a Union Query

我有 table 跟踪员工 QA 数据。它跟踪员工 (UserLogin)、员工工作日期 (NoteDate) 和 5 yes/no 字段(以及用于此查询目的的其他不相关字段以及与以下代码匹配的更多趋势)。一个单独的 table 跟踪员工数据,包括他们所在的单位 (Unit)。我有一个联合查询,它正在绘制我为了创建一个总结准确率的交叉表而记下的字段。我现在希望能够使用相同的查询来跟踪一个团队的表现。我尝试使用在两者中都显示为连接的 UserLogin 字段对员工 table 进行内部连接。然后我要求查询使用我在控件中指定的团队来仅查询那些团队成员并汇总他们的数据。这是第一个适用于所有员工的查询。

SELECT            ID AS SourceID
                , UserLogin
                , Year([NoteDate]) AS Yr
                , Format([NoteDate], "mmm") AS Mo
                , "Appeal" AS Trend 
FROM              tblQA 
WHERE             Appeal=False

UNION SELECT      ID
                , UserLogin
                , Year([NoteDate])
                , Format([NoteDate], "mmm")
                , "NRP" 
FROM tblQA 
WHERE             NRP = False

UNION SELECT      ID
                , UserLogin
                , Year([NoteDate])
                , Format([NoteDate], "mmm")
                , "ChurnEscalation" 
FROM              tblQA 
WHERE             ChurnEscalation = False

UNION SELECT      ID
                , UserLogin
                , Year([NoteDate])
                , Format([NoteDate], "mmm")
                , "ProtocolNotFollowed" 
FROM              tblQA 
WHERE             ProtocolNotFollowed = False

UNION SELECT      ID
                , UserLogin
                , Year([NoteDate])
                , Format([NoteDate], "mmm")
                , "Resubmission" 
FROM              tblQA 
WHERE             Resubmission = False

然后是我在此处尝试使用新代码的前几行。

SELECT tblQA.ID AS SourceID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "Appeal" AS Trend FROM tblQA  INNER JOIN tblUser ON tblQA.UserLogin = tblUser.UserLogin WHERE Appeal=FALSE AND (((tblUser.Unit)=[Forms]![MainMenu]![btnManagersMenu].[Form]![txtADUnitPT]))
UNION SELECT tblQA.ID AS SourceID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "NRP" AS Trend FROM tblQA  INNER JOIN tblUser ON tblQA.UserLogin = tblUser.UserLogin WHERE Appeal=FALSE AND (((tblUser.Unit)=[Forms]![MainMenu]![btnManagersMenu].[Form]![txtADUnitPT]))
UNION SELECT tblQA.ID AS SourceID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "ChurnEscalation" AS Trend FROM tblQA  INNER JOIN tblUser ON tblQA.UserLogin = tblUser.UserLogin WHERE Appeal=FALSE AND (((tblUser.Unit)=[Forms]![MainMenu]![btnManagersMenu].[Form]![txtADUnitPT]))
UNION SELECT tblQA.ID AS SourceID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "ProtocolNotFollowed" AS Trend FROM tblQA  INNER JOIN tblUser ON tblQA.UserLogin = tblUser.UserLogin WHERE Appeal=FALSE AND (((tblUser.Unit)=[Forms]![MainMenu]![btnManagersMenu].[Form]![txtADUnitPT]))
UNION SELECT tblQA.ID AS SourceID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "Resubmission" AS Trend FROM tblQA  INNER JOIN tblUser ON tblQA.UserLogin = tblUser.UserLogin WHERE Appeal=FALSE AND (((tblUser.Unit)=[Forms]![MainMenu]![btnManagersMenu].[Form]![txtADUnitPT]))

虽然我没有得到看起来有效的结果 - 700% 的趋势准确度和所有趋势相同的值。谁能看出我做错了什么?

Here is an image of the results I get with all items tracked 编辑-好的,我取得了一些进展,但仍然遇到一些麻烦。我在后续查询(基于 June7 的 DataUNION 代码的查询)中意识到,我正在从所有员工中提取我的总 QA 计数,而不仅仅是单位,所以我更改了该代码以添加单位标准。

SELECT    DataUNIONUnitAD.Yr
        , DataUNIONUnitAD.Mo
        , DataUNIONUnitAD.Trend
        , Count(DataUNIONUnitAD.UserLogin) AS CountOfUserLogin
        , ctqADUnitTrends.CntYrMo
        , Count([UserLogin])/[CntYrMo]*100 AS Pct 
FROM    (
         SELECT       Year([NoteDate]) AS Yr
                    , Format([NoteDate],"mmm") AS Mo
                    , Count(tblQA.ID) AS CntYrMo 
         FROM         tblQA 
         WHERE        (((tblUser.Unit)=[Forms]![MainMenu]![btnManagersMenu].[Form]![txtADUnitPT])) 
         GROUP BY     Year([NoteDate])
                    , Format([NoteDate],"mmm")
        ) AS ctqADUnitTrends INNER JOIN DataUNIONUnitAD ON 
            (ctqADUnitTrends.Mo = DataUNIONUnitAD.Mo) AND (ctqADUnitTrends.Yr = DataUNIONUnitAD.Yr) 
GROUP BY  DataUNIONUnitAD.Yr
        , DataUNIONUnitAD.Mo
        , DataUNIONUnitAD.Trend
        , ctqADUnitTrends.CntYrMo;

这给了我正确的数量级百分比,但所有趋势仍然相同。 Image 我试图查看是否可以确定我可能无意中更改了某些内容的位置,但我无法弄清楚。

或者,不更改 UNION 查询,调整后续查询(顺便说一句,注意查询名称的更改):

UNION 查询:
SELECT ID AS SourceID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "Appeal" AS Trend FROM tblQA WHERE Appeal=True UNION SELECT ID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "NRP" FROM tblQA WHERE NRP=True UNION SELECT ID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "Churn" FROM tblQA WHERE ChurnEscalation=True UNION SELECT ID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "Protocol" FROM tblQA WHERE ProtocolNotFollowed=True UNION SELECT ID, tblQA.UserLogin, Year([NoteDate]) AS Yr, Format([NoteDate], "mmm") AS Mo, "Resub" FROM tblQA WHERE Resubmission=True;

聚合查询:
SELECT QA_UNION.Yr, QA_UNION.Mo, QA_UNION.Trend, QA_UNION.UserLogin, tblUser.Unit, Query3.CntYrMo, Count(*) AS CountOfUser, Count(*)/[CntYrMo]*100 AS Pct FROM tblUser INNER JOIN ((SELECT Year([NoteDate]) AS Yr, Format([NoteDate],"mmm") AS Mo, Count([tblQA].ID) AS CntYrMo FROM tblQA GROUP BY Year([NoteDate]), Format([NoteDate],"mmm")) AS Query3 INNER JOIN QA_UNION ON (Query3.Mo = QA_UNION.Mo) AND (Query3.Yr = QA_UNION.Yr)) ON tblUser.UserLogin = QA_UNION.UserLogin GROUP BY QA_UNION.Yr, QA_UNION.Mo, QA_UNION.Trend, QA_UNION.UserLogin, tblUser.Unit, Query3.CntYrMo;

然后是 CROSSTAB:
PARAMETERS [Forms]![MainMenu]![btnManagersMenu].[Form]![txtADUnitPT] Text ( 255 ); TRANSFORM First(QA_COUNT.Pct) AS FirstOfPct SELECT QA_COUNT.Yr, QA_COUNT.Trend, QA_COUNT.Unit FROM QA_COUNT WHERE (((QA_COUNT.Unit)=[Forms]![MainMenu]![btnManagersMenu].[Form]![txtADUnitPT])) GROUP BY QA_COUNT.Yr, QA_COUNT.Trend, QA_COUNT.Unit PIVOT QA_COUNT.Mo In ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");