Stichtagsinventur

Hallo,

ich hoffe hier kann mir jemand helfen, das unser Programmierer leider krank ist und ich mir somit irgendwie selber helfen muß.
Wir haben eine Artikel-Datenbank (Artikelnr, Bezeichnung, Preis, Erfassungstag, Bestand). Ich möchte gern eine Bestandsliste zu einem bestimmten Tag ausdrucken. Außerdem wie hoch der Preis für den selben Artikel an diesem Tag gewesen ist.

Kann mir (bidde, bidde) jemand sagen, wie die Abfrage für so etwas aussehen muß?

Danke schon mal! Sabine

Wir haben eine Artikel-Datenbank (Artikelnr, Bezeichnung,
Preis, Erfassungstag, Bestand). Ich möchte gern eine
Bestandsliste zu einem bestimmten Tag ausdrucken. Außerdem wie
hoch der Preis für den selben Artikel an diesem Tag gewesen
ist.

z. B. so:
SELECT Artikelnr, Bezeichnung, Preis FROM TabellenName WHERE Erfassungstag=‚Datum‘;

// TabellenName ist der Name der Tabelle…
// Datum ist das gewünschte Datum. Auf das Format achten! (10.01.2008 oder 2008-01-10 oder …)

Danke für die schnelle Anrwort.
Sorry, doch ich hatte in meiner Anfrage einen Fehler gemacht.

Die Tabellen sind in etwa so

Artikel :
Nr
Bez
Bestand

Belegerfassung
ArtNr
ArtBez
Erfassungstag
Preis
Belegart

Das heißt ich kann den Bestand aus der Artikeltabelle nicht mit einem Tag in Verbindung bringen.
Oder doch?

Doch. Normalerweise hat man auch IDs… Mh, du musst wissen, was z. B. der Primärschlüssel ist.

Also folgender Aufbau:
Tabelle1 = Artikel, Nr, Bez, Bestand

Tabelle2 = Belegerfassung, ArtNr, ArtBez, Erfassungstag, Preis, Belegart

Ich gehe jetzt mal davon aus, dass von Tabelle1 die Nr das selbe ist, wie bei Tabelle2 die ArtNr, oder??? Sollte zumindest irgendwas da sein, womit man nachvollziehen kann, das es sich um ein und denselben Artikel handelt.

Abfrage:

SELECT Tabelle1.Nr AS ANr,
 Tabelle1.Bez As ABez,
 Tabelle2.ArtNr AS BNr,
 Tabelle2.Erfassungstag AS BeT,
 Tabelle2.Preis AS Bprei
FROM Tabelle1 LEFT JOIN Tabelle2 ON ANr=BNr;

Müsste klappen…

Datum vergessen:

SELECT Tabelle1.Nr AS ANr,
 Tabelle1.Bez AS ABez,
 Tabelle2.ArtNr AS BNr,
 Tabelle2.Erfassungstag AS BeT,
 Tabelle2.Preis AS Bpreis
FROM Tabelle1 LEFT JOIN Tabelle2 ON (ANr=BNr) AND (BeT='01.10.2008');

Tabelle1/2 musst du natürlich durch die TabellenNamen ersetzen.
Das AS gibt nur einen Alias. Genauso gut (aber halt unübersichtlich bei langen Abfragen), kannst du es wie folgt machen:

SELECT Tabelle1.Nr,
 Tabelle1.Bez,
 Tabelle2.ArtNr,
 Tabelle2.Erfassungstag,
 Tabelle2.Preis
FROM Tabelle1 LEFT JOIN Tabelle2 ON (Tabelle1.Nr=Tabelle2.ArtNr) AND (Tabelle2.Erfassungstag='01.10.2008');

Nach SELECT kannst du alles aufführen, was angezeigt werden soll. Wenn du mit AS (Alias) arbeitest, kannst du damit die Überschriften der Zeilen bestimmen. D.h., wenn du z. B.:
Tabelle2.Preis AS Bpreis
änderst in:
Tabelle2.Preis AS ‚Preis in EURO‘
dann wird die Überschrift ‚Preis in EURO‘ sein.

//PS: Welches SQL nutzt du überhaupt? Kenne nämlich nur MySQL, aber ich glaube die Abfragen sind relativ identisch…

Danke schön für die Antwort. Kann es leider erst am Montag ausprobieren - gebe dann noch mal ´ne kurze Rückmeldung.

Mit welchem Sql wir arbeiten kann ich gar nicht so genau sagen - es ist in unser Warenwirtschaftssystem eingebunden. Aber das was Du geschrieben hast, kommt mir vertraut vor. Is ja mglw. MySQL.

Schönes Wochenende und viele Grüße aus Dresden - Sabine

Hallo mayhem,

habe das Statement ausprobiert. Leider wird nicht der Bestand und das Datum des Stichtages wiedergegeben (31.12.2007) sondern der derzeit bestehende Bestand und auch der aktuelle Preis. Die Felder mit der Artikelnummer und dem Erfassungstag aus Tabelle 2 sind leer geblieben. Was könnte man an der Abfrage noch ändern, damit die richtigen Daten ausgegeben werden?

Schon mal Danke - Sabine