SQL Befehl für Lagerwirtschaft

Hallo ihr lieben,

Mein Problem:
Ich hab eine Tabelle mit folgenden Spalten
-ID
-Artikel_Nr
-Menge
-Inhousetermin (gibt an wann die Ware ankommt)

Beispiel:
ID | Artikel_Nr | Menge | Inhousetermnin
1 | 111 | 100 | 01.01.2006
2 | 111 | 50 | 01.01.2006
3 | 222 | 200 | 05.01.2006
4 | 222 | 80 | 06.01.2006

Ich möchte nun eine Anweisung schreiben, die mir die kumulierte Menge jedes Artikels auf das Tagesdatum ausgibt.

Also:
ID | Artikel_Nr | Menge | Inhousetermnin
2 | 111 | 150 | 01.01.2006
3 | 222 | 200 | 05.01.2006
4 | 222 | 280 | 06.01.2006

Ich hoffe ihr könnt mir weiterhelfen.

Vielen dank im Voraus,
Mari

Hi Mariel,

ohne es ausprobiert zu haben:

SELECT Artikel_Nr, SUM(Menge), Inhousetermin
FROM ArtikelTabelle
GROUP BY Artikel_Nr, Inhousetermin

Den Tabellennamen musst du natürlich auf jeden Fall anpassen.

Was die ID in deiner Ausgabetabelle soll, habe ich leider nicht verstanden und daher weggelasen. Was für eine ID soll das sein?

Alles Gute wünscht
… Michael

Hallo Michael,

die Group By Funktion hatte ich ganz vergessen ,)
Danke erst mal für deine prompte Antwort, es hat mir etwas weiter geholfen.

Leider rechnet deine Anweisung die Menge nur auf einen Tag auf.
Ergebnis deiner Anweisung:
Artikel_Nr | Menge | Inhousetermnin
111 | 150 | 01.01.2006
222 | 200 | 05.01.2006
222 | 80 | 06.01.2006

Mein Wunsch wäre es vom Artikel 222 am 06.01.2006 die Menge 280 zu erhalten.

Ist das möglich?

p.s. die ID hab ich weggelassen - hat da keinen Sinn ,)

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

Hallo Mariel,

Leider rechnet deine Anweisung die Menge nur auf einen Tag
auf.
Ergebnis deiner Anweisung:
Artikel_Nr | Menge | Inhousetermnin
111 | 150 | 01.01.2006
222 | 200 | 05.01.2006
222 | 80 | 06.01.2006

Mein Wunsch wäre es vom Artikel 222 am 06.01.2006 die Menge
280 zu erhalten.

Ist das möglich?

mir ist leider nicht klar, welche Posten du aufaddieren willst, und welche nicht. Wenn das Datum egal ist, lass es in der GROUP BY Klausel weg. Oder ist es doch irgendwie wichtig? In welcher Form? Was ist mit Lagerabgängen?

Alles Gute wünscht
… Michael

mir ist leider nicht klar, welche Posten du aufaddieren
willst, und welche nicht.

Im Prinzip ist es so - jedes Eingangsdatum soll mit der kumulierten Menge des Artikels angezeigt werden.

Unverständlich? *g
Am besten kann ich das glaub ich an Beispielen erklären :smile:

Beispiel (an nur einem Artikel):
Inhousetermin | Artikel | Menge
01.01. | 111 | 100
02.01. | 111 | 50
05.01. | 111 | 200
10.01. | 111 | 80

Ich möchte eine Anweisung schreiben, die folgendes ausgibt:
Inhousetermin | Artikel | Menge
01.01. | 111 | 100
02.01. | 111 | 150
05.01. | 111 | 350
10.01. | 111 | 430

Wie du siehst, wird jedesmal der Eingang auf den bereits eingegangen Eingang addiert

Was ist mit Lagerabgängen?

Momentan noch nicht notwendig

Hi!

Leider rechnet deine Anweisung die Menge nur auf einen Tag
auf.
Ergebnis deiner Anweisung:
Artikel_Nr | Menge | Inhousetermnin
111 | 150 | 01.01.2006
222 | 200 | 05.01.2006
222 | 80 | 06.01.2006

Mein Wunsch wäre es vom Artikel 222 am 06.01.2006 die Menge
280 zu erhalten.

Ist das möglich?

Ja - mach ein MAX vom Inhousetermin

SELECT Artikel\_Nr, SUM(Menge), max(Inhousetermin)
FROM ArtikelTabelle
GROUP BY Artikel\_Nr

Grüße,
Tomh

Hi Mariel,

Ich möchte eine Anweisung schreiben, die folgendes ausgibt:
Inhousetermin | Artikel | Menge
01.01. | 111 | 100
02.01. | 111 | 150
05.01. | 111 | 350
10.01. | 111 | 430

ok, da reicht auch das MAX nicht, was Tomh hier nannte. Das müsste so gehen:

SELECT A.Artikel\_Nr, SUM(B.Menge), A.Inhousetermin
 FROM ArtikelTabelle A, ArtikelTabelle B
 WHERE A.Artikel\_Nr=B.Artikel\_Nr 
 AND B.Inhousedatum

Habe aber jetzt nicht die Zeit, mir Tabellen anzulegen, und das auszuprobieren, ob ich da noch einen Denkfehler drin habe.

Alles Gute wünscht
... Michael

War doch neugierieg. So geht es in PostgreSQL, Bezeichner bitte selbst umsetzen, habe kürzere gewählt:

SELECT A.Artikel\_Nr, SUM(B.Menge), A.Termin
 FROM Deliveries A, Deliveries B
 WHERE A.Artikel\_Nr=B.Artikel\_Nr 
 AND B.Termin

Hi,
unter Oracle funktioniert es so oder so ähnlich:

select artikel_nr, inhousetermin,
sum(sum(menge)) over (partition by artikel_nr order by inhousetermin)
from die_tabelle
group by artikel_nr, inhousetermin

Jens

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

Hi,
unter Oracle funktioniert es so oder so ähnlich:

select artikel_nr, inhousetermin,
sum(sum(menge)) over (partition by artikel_nr order by
inhousetermin)
from die_tabelle
group by artikel_nr, inhousetermin

Jens

Hallo Jens,

danke für den Tip.
Ich finde es einen interessanten Ansatz. Allerding weiß ich nicht wie die partition funktion in access geht, aber sie steht zumindest in der Hilfe drinnen. Ich versuch mich mal dran und schau ob es so klappt.

Many Thx

1000x Dank, damit komm ich schon mal weiter.
Leider war ich in den letzten Tagen unterwegs und konnte es erst jetzt testen.
Ich bin zwar wieder am nächsten Problem, aber diesmal beiß ich mich durch. Und wenn nicht meld ich mich wieder ,)

Bis denne

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

Hi Mariel,

Ich finde es einen interessanten Ansatz. Allerding weiß ich
nicht wie die partition funktion in access geht, aber sie
steht zumindest in der Hilfe drinnen. Ich versuch mich mal
dran und schau ob es so klappt.

soweit ich weiss, geht das im MS SQL-Server zumindest genauso wie bei Oracle. Sonst kennt meines Wissens aber nur noch DB2 OVER PARTITION. Die Lösung mit derselben Tabelle zweimal in der FROM-Klausel dürfte portabler sein.

Alles Gute wünscht
… Michael