Чтобы достичь желаемого результата в Access, я хотел бы попытаться не-стержень в первой таблице и получить минимальное и максимальное каждого учреждения, как, например:
SELECT A.[Account#], MIN(A.Agency) AS MinAgency, MAX(A.Agency) AS MaxAgency
FROM
(
SELECT B.[Account#], B.Agency1 AS Agency
FROM SourceTable AS B
UNION
SELECT C.[Account#], C.Agency2
FROM SourceTable AS C
UNION
SELECT D.[Account#], D.Agency3
FROM SourceTable AS D
) AS A
GROUP BY A.[Account#]
Я мог бы сохранить этот запрос как " MinMaxAgencyQuery ", а затем используйте его для создания столбца« Тип письма ». Тогда, я хотел бы построить этот столбец в запросе на объединение следующим образом:
SELECT E.[Account#], "Undesignated" AS [Letter Type]
FROM SourceTable AS E LEFT JOIN MinMaxAgencyQuery AS A ON E.[Account#] = A.[Account#]
WHERE MinAgency = "a1" AND MaxAgency = "a1"
UNION
SELECT E.[Account#], "PartiallyDesignated" AS [Letter Type]
FROM SourceTable AS E LEFT JOIN MinMaxAgencyQuery AS A ON E.[Account#] = A.[Account#]
WHERE MinAgency = "a1" AND MaxAgency <> "a1"
UNION
SELECT E.[Account#], "Designated" AS [Letter Type]
FROM SourceTable AS E LEFT JOIN MinMaxAgencyQuery AS A ON E.[Account#] = A.[Account#]
WHERE MinAgency > "a1"
Конечно, это решение основано на «a1» на самом деле является «a1» (и, таким образом, меньше, чем другие учреждения при выполнении строки -comparison).
Если мне нужно сделать все это в одном запросе, я бы заменить мой первый запрос в каждом из трех unioned запросов следующим образом:
SELECT E.[Account#], "Undesignated" AS [Letter Type]
FROM SourceTable AS E LEFT JOIN (
SELECT A.[Account#], MIN(A.Agency) AS MinAgency, MAX(A.Agency) AS MaxAgency
FROM
(
SELECT B.[Account#], B.Agency1 AS Agency
FROM SourceTable AS B
UNION
SELECT C.[Account#], C.Agency2
FROM SourceTable AS C
UNION
SELECT D.[Account#], D.Agency3
FROM SourceTable AS D
) AS A
GROUP BY A.[Account#]
) AS F ON E.[Account#] = F.[Account#]
WHERE MinAgency = "a1" AND MaxAgency = "a1"
UNION
SELECT E.[Account#], "PartiallyDesignated" AS [Letter Type]
FROM SourceTable AS E LEFT JOIN (
SELECT A.[Account#], MIN(A.Agency) AS MinAgency, MAX(A.Agency) AS MaxAgency
FROM
(
SELECT B.[Account#], B.Agency1 AS Agency
FROM SourceTable AS B
UNION
SELECT C.[Account#], C.Agency2
FROM SourceTable AS C
UNION
SELECT D.[Account#], D.Agency3
FROM SourceTable AS D
) AS A
GROUP BY A.[Account#]
) AS F ON E.[Account#] = F.[Account#]
WHERE MinAgency = "a1" AND MaxAgency <> "a1"
UNION
SELECT E.[Account#], "Designated" AS [Letter Type]
FROM SourceTable AS E LEFT JOIN (
SELECT A.[Account#], MIN(A.Agency) AS MinAgency, MAX(A.Agency) AS MaxAgency
FROM
(
SELECT B.[Account#], B.Agency1 AS Agency
FROM SourceTable AS B
UNION
SELECT C.[Account#], C.Agency2
FROM SourceTable AS C
UNION
SELECT D.[Account#], D.Agency3
FROM SourceTable AS D
) AS A
GROUP BY A.[Account#]
) AS F ON E.[Account#] = F.[Account#]
WHERE MinAgency > "a1"
Вы никогда не указано, что становится счета # о том, что не имеют значений для Агентства1, Агентства2 и Агентства3, и поэтому они не будут показаны с учетом этого решения.
Являются ли агентство1, агентство2 и агентство3 единственными тремя столбцами для проверки значений a (x)? – Sturgus
Спасибо, что нашли время ответить. Может быть до 20 столбцов. Я добавил другое изображение фактических заголовков таблиц и образцов данных из таблицы, которую я использую. – Don85203
Вы обнаружите, что этот запрос становится чрезвычайно сложным для создания. Это происходит исключительно потому, что данные моделируются очень плохо. Если агентские + счета (+ $ Обозначенные) были помещены в таблицу пересечений (много: много), то эта проблема была бы тривиальной. Каковы критерии для количества столбцов DX_Agency? Вы говорите, что он подходит к D20_Agency !? – Sturgus