Select - OK?

Hallo ‚Wer-Weiss-Was-ler‘,

ich brauche heute hoffentlich nur 'ne Bestätigung (vielleicht habe ich das doch mal auf Anhieb richtig).

Ausgangslage:

  • Artikelkartei mit dem kompletten Artikelstamm
    1
    :
    n
  • Bestandsdaten (u.a. Inventurdaten aus mehreren Inventuren)

Ziel:
Es soll ein Script erstellt werden, mit dem ich alle Artikel erhalte, für die z.B. zum 30.06. keine Inventurdaten erfaßt wurden (sollten sonst ja in den Bestandsdaten enthalten sein).

Lösungsansatz:
SELECT from
where not exists (
select from
where =
and );

RICHTIG ???

mfg
Thomas

Lösungsansatz:
SELECT from
where not exists (
select from
where =

and );

Ich würde auf
and );
prüfen, denn sonst würdest Du die vorher inventarisierten Artikel nicht mit erfassen, was wohl Deine Absicht war.

Gruß

J.

Vielen Dank erst mal, Deinen Namen habe ich hier schon sehr oft mit wertvollen Hinweisen gesehen.

Den Script von oben habe ich in der Zwischenzeit schon ausprobiert und im Prinzip geht’s, jetzt kam jedoch der nächste Wunsch gleich nachgeschoben, doch da fehlt mir noch der SQL-Zusammenhang (ich lerne halt noch).

Wie kann ich in der Anzeige die Inventurmenge mit erscheinen lassen oder auch ggf. weitere ( :wink: denn bestimmt geht’s dann noch weiter, wenn ich diese Lösung habe) Felder aus der Tabelle „“ ?
(Einfach im äußeren select die Felder dazuschreiben und from um erweitern ging nicht, da erhalte ich tausende Müllsätze.)

mfg
Thomas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Vielen Dank erst mal, Deinen Namen habe ich hier schon sehr
oft mit wertvollen Hinweisen gesehen.

Bittebitte *errötundfreu*

Wie kann ich in der Anzeige die Inventurmenge mit erscheinen
lassen oder auch ggf. weitere ( :wink: denn bestimmt geht’s dann
noch weiter, wenn ich diese Lösung habe) Felder aus der
Tabelle „“ ?
(Einfach im äußeren select die Felder dazuschreiben und from
um erweitern ging nicht, da erhalte ich
tausende Müllsätze.)

Der Ansatz war schon OK, nur willst Du nicht die einzelnen Datensätze haben, sondern pro Artikel aufsummiert. Dazu gibt es die Anweisung GROUP BY und die sog. Aggregatsfunktionen (Funktionen, die sich auf Datensatzmengen anwenden lassen).
Beispiel: Summe und Durchschnittspreis

SELECT , sum(), avg()
 from , 
 where =
 and not exists (
 select from 
 where =
 and ;

Wichtig ist dabei, daß Du die Artikelfelder (und generell alle Felder, die nicht von einer Aggregatsfunktion erfaßt werden) in der GROUP BY-Klausel aufführst. Du darfst dann auch keine nicht-aggregierten Felder mit aufnehmen. Klingt etwas kompliziert, aber keine Angst- Du kriegst schon eine Fehlermeldung.

Ich weiß nicht, mit welcher DB Du arbeitest, aber das kriegst Du schon hin :smile:

Gruß

J.