Mehrere SELECT in einer Abfrage

Enrico Holz

Neuer Benutzer
Beiträge
2
Hallo,

ich möchte mehere SELECT in einer Abfrage zusammen bekommen, die dann in einer Tabelle nebeneinander ausgegeben werden.
Momentan führe ich alle drei nacheinander aus was ein bisschen umständlich ist.

Meine SQL Erfahrungen sind rein Learning by doing, und hier stoße ich gerade an meine Grenzen.
Das sind die drei Abfragen:

SELECT
COUNT (DISTINCT bestandsbewegung.sachnummer) AS Artikel_WA ,
SUM(bestandsbewegung.istmenge) AS Stückzahl_WA

FROM
bestandsbewegung

WHERE
lagerort = '0010'
AND bewegungsart = 'VSD'
AND TRUNC (newdat) = '22.04.2024'

____________________________________________________________________________

SELECT
COUNT(DISTINCT bestandsbewegung.le_nummer) AS Paletten

FROM
bestandsbewegung

WHERE
Lagerbereich in('PLK','PLN','PLA','PL3','PLS')
AND Bewegungsart in('101','501')
AND TRUNC (newdat) = '22.04.2024'

___________________________________________________________________________

SELECT
COUNT (DISTINCT bestandsbewegung.sachnummer) AS Artikel_WE ,
SUM(bestandsbewegung.istmenge) AS Stückzahl_WE

FROM
bestandsbewegung

WHERE
lagerort = '0010'
AND bewegungsart in ('101','501','561')
AND TRUNC (newdat) = '22.04.2024'

Vielen Dank schon mal im Voraus.


VG Enrico
 
Werbung:
Aggregate ignorieren NULL Werte. Wenn man einen Ausdruck verwendet der nicht NULL ist für die Zeilen die man zählen/summieren will, kann man auch nur eine Teilmenge aggregieren. Bei Oracle geht das leider nur mit einem CASE Ausdruck:

Code:
SELECT COUNT(DISTINCT CASE WHEN lagerort = '0010' AND bewegungsart = 'VSD' then bestandsbewegung.sachnummer END) AS Artikel_WA,
       SUM(CASE WHEN lagerort = '0010' AND bewegungsart = 'VSD' AND TRUNC(newdat) = DATE '2024-04-22' THEN istmenge END) AS Stückzahl_WA,
       COUNT(DISTINCT CASE WHEN Lagerbereich in('PLK','PLN','PLA','PL3','PLS') AND Bewegungsart in('101','501') THEN le_nummer END) AS Paletten,
       COUNT(DISTINCT CASE WHEN lagerort = '0010' AND bewegungsart in ('101','501','561') THEN sachnummer END) AS Artikel_WE ,
       SUM(CASE WHEN lagerort = '0010' AND bewegungsart in ('101','501','561') THEN istmenge END) AS Stückzahl_WE
FROM bestandsbewegung
WHERE TRUNC(newdat) = DATE '2024-04-22'

Da alle Deine drei Abfragen die gleiche Bedingung für newdat hatten, kann man die in der WHERE Bedingung lassen. Ich rate sehr stark davon ab Datumswerte zu spezifizieren, die abhängig von der Umgebung sind (auf einem meiner Rechner würde die Bedingung TRUNC (newdat) = '22.04.2024' einen Fehler produzieren auf einem anderen würde sie funktionieren). Ein ANSI formatierter Datumswert funktioniert immer, egal wie der Rechner der den SQL Befehl schickt, konfiguriert ist.
 
Werbung:
Hallo,

besten Dank, das war ja schneller als die Polizei erlaubt. Ich werde mir das gleich mal ansehen.
newdat mit GROUP BY, klingt interessant in der Tabelle werden die Daten der letzten 40 Tage geschrieben,
was älter ist wird in eine ander Tabelle archiviert.
 
Zurück
Oben