Um das gewünschte Ergebnis in Access zu erreichen, würde ich die erste Tabelle un-Dreh versuchen, und die min und max von jeder Agentur als solche erhalten:
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#]
ich diese Abfrage speichern könnte als " MinMaxAgencyQuery "und dann zum Erstellen meiner Spalte" Brieftyp "verwenden. Dann würde ich diese Spalte in einer Union-Abfrage bauen wie folgt:
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"
Natürlich ist diese Lösung auf „a1“ beruht eigentlich „a1“ (und damit zu sein, weniger als die anderen Agenturen, wenn eine Zeichenfolge zu tun -Vergleich).
Wenn ich das alles in derselben Abfrage tun muß, würde ich meine erste Abfrage in jedem der drei unioned Abfragen wie so ersetzen:
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"
Sie angegeben nie was von Account # 's wird, dass haben keine Werte für Agentur1, Agentur2 und Agentur3 und würden daher bei dieser Lösung nicht angezeigt.
Sind Agentur1, Agentur2 und Agentur3 die einzigen drei Spalten, die auf die a (x) -Werte prüfen? – Sturgus
Danke, dass Sie sich die Zeit genommen haben zu antworten. Es könnte bis zu 20 Spalten geben. Ich fügte ein anderes Bild der tatsächlichen Tabellenüberschriften und der Beispieldaten von der Tabelle hinzu, die ich verwende. – Don85203
Sie werden feststellen, dass diese Abfrage extrem schwierig zu erstellen ist. Dies liegt ausschließlich daran, dass die Daten sehr schlecht modelliert sind. Wenn Agentur + Konten (+ $ Designated) in einer Schnittstellentabelle (viele: viele) platziert würden, wäre dieses Problem trivial. Was sind die Kriterien für die Anzahl der DX_Agency-Spalten? Du sagst es geht bis D20_Agency !? – Sturgus