MS Access SQL Запрос не существует - PullRequest
3 голосов
/ 12 февраля 2020

Я застрял при попытке выяснить, как вернуть данные, которые находятся в одной таблице, но не в другой. Я думал, что внешнее соединение будет работать, но, похоже, Access этого не позволяет.

My SQL возвращает результаты, если запись существует в MonthlyTargets_0_SPARTN_qry, но если записи нет, данные не возвращаются. Я хотел бы отобразить 0, если нет записей.

Мой sql:

SELECT REF_TestCategory_tbl.CategoryID
    ,MonthlyTargets_0_SPARTN_qry.[Supervisor Id] AS TestOfficerID
    ,Count(MonthlyTargets_0_SPARTN_qry.[Sheet ID]) AS Actuals
    ,MonthlyTargets_0_SPARTN_qry.ComplianceMonth
FROM MonthlyTargets_0_SPARTN_qry
INNER JOIN (
    REF_TestCategory_tbl INNER JOIN REF_TestCatalog_tbl ON REF_TestCategory_tbl.CategoryID = REF_TestCatalog_tbl.TestCategory
    ) ON MonthlyTargets_0_SPARTN_qry.[Test Number] = REF_TestCatalog_tbl.TestID
GROUP BY REF_TestCategory_tbl.CategoryID
    ,MonthlyTargets_0_SPARTN_qry.[Supervisor Id]
    ,MonthlyTargets_0_SPARTN_qry.ComplianceMonth
ORDER BY REF_TestCategory_tbl.CategoryID;

, который возвращает:

CategoryID  TestOfficerID   Actuals     ComplianceMonth
    1           3062            26      1/1/2020
    1           3062            6       2/1/2020
    2           3062            2       1/1/2020
    3           3062            2       1/1/2020
    3           3062            1       2/1/2020

, если нет записи для фев, мне нужно, чтобы он вернулся в 0 в Actuals Спасибо

1 Ответ

0 голосов
/ 12 февраля 2020

Если ваши значения «ComplianceMonth» постоянно существуют независимо от ваших смежных данных (имеется в виду, что соседние данные, возвращаемые для вашего ComplianceMonth, равны NULL), вы можете сделать что-то вроде этого.

    SELECT REF_TestCategory_tbl.CategoryID, 
       MonthlyTargets_0_SPARTN_qry.[Supervisor Id] AS TestOfficerID, 
       coalesce(Count(MonthlyTargets_0_SPARTN_qry.[Sheet ID]),0) AS Actuals,
       MonthlyTargets_0_SPARTN_qry.ComplianceMonth
FROM            dbo.MonthlyTargets_0_SPARTN_qry RIGHT OUTER JOIN
                         dbo.REF_TestCategory_tbl RIGHT OUTER JOIN
                         dbo.REF_TestCatalog_tbl ON REF_TestCategory_tbl.CategoryID = REF_TestCatalog_tbl.TestCategory ON MonthlyTargets_0_SPARTN_qry.[Test Number] = REF_TestCatalog_tbl.TestID
GROUP BY REF_TestCategory_tbl.CategoryID, MonthlyTargets_0_SPARTN_qry.[Supervisor Id], MonthlyTargets_0_SPARTN_qry.ComplianceMonth
ORDER BY REF_TestCategory_tbl.CategoryID

Надеюсь, что это поможет.

...