Hallo zusammen,
ich bin leider noch neu im Thema und habe ein Problem mit einer Abfrage. Ich möchte aus einer Tabelle Chargen die Wassermenge abrufen. Nach ID sortiert die letzten 20 Werte für Maschine 1 und Rezept 1. Das ist auch kein Problem. Die Abfrage soll aber ergänzt werden um Maschine 2 und Rezept 1, ebenfalls nach ID sortiert die letzten 20 Werte.
Also dachte ich einfach Abfrage kopieren, anpassen und mit UNION verbinden. Allerdings sortiert er bei der zweiten Abfragehälfte nicht nach ID?
SELECT TOP 20 [ChargenID], [Wasser]
FROM Chargen
WHERE [RezeptNr]=1 AND [Maschine]=1
ORDER BY [ChargenID] DESC
UNION SELECT TOP 20 [ChargenID], [Wasser]
FROM Chargen
WHERE [RezeptNr]=1 AND [Maschine]=2
ORDER BY [ChargenID] DESC
Vergleiche grundlegende Syntax des SELECT-Befehls (https://www.sql-und-xml.de/sql-tutorial/select-grundbegriff-zur-auswahl-von-daten.html):
Sortierenanweisungen in den Teilabfragen einer UNION-Abfrage werden nicht berücksichtigt, nur die allerletzte. Das beißt sich mit den TOP-X-Gestaltungen, die ihrerseits funktionell eine Sortierung benötigen.
Ich sehe zwei Auswege:
1) Prozesse voneinander trennen
SELECT
T1.ChargenID,
T1.Wasser
FROM
(
SELECT TOP 20
ChargenID,
Wasser
FROM
Chargen
WHERE
RezeptNr = 1
AND
Maschine = 1
ORDER BY
ChargenID DESC
) AS T1
UNION ALL
SELECT
T2.ChargenID,
T2.Wasser
FROM
(
SELECT TOP 20
ChargenID,
Wasser
FROM
Chargen
WHERE
RezeptNr = 1
AND
Maschine = 2
ORDER BY
ChargenID DESC
) AS T2Hier kannst Du noch eine Sortierenanweisung für die äußere Darstellung anfügen.
2) Statt UNION würde ich aber tendenziell auf so etwas setzen (ungetestet)
SELECT
T1.ChargenID,
T1.Wasser,
T1.Maschine
FROM
Chargen AS T1
WHERE
T1.Maschine IN (1, 2)
AND
T1.ChargenID IN
(
SELECT TOP 20
T2.ChargenID
FROM
Chargen AS T2
WHERE
T2.RezeptNr = 1
AND
T2.Maschine = T1.Maschine
ORDER BY
ChargenID DESC
)Dabei ist unterstellt, dass ChargenID in der Tabelle eindeutig ist.
Der obere Code von dir funktioniert. Vielen Dank dafür!
Bei der unteren Variante rechnet Access Ewigkeiten, bringt dann aber auch das Ergebnis.
rechnet Access EwigkeitenEine sinnvolle Indizierung (https://www.ms-office-forum.net/forum/showthread.php?t=317707) in der Tabelle setze ich als selbstverständlich voraus.