PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
MSSQL/T-SQL zusammenfassende Verkaufszahlen über Stücklisten
#11
Hi,

Das Schema hast Du getroffen ( ist vorgegeben ), hier kurz eine Erläuterung der Tabelle Stuecklisten:
  • Stueckliste
    Die Artikelnummer der Stückliste, in meinem Beispiel die 789
  • Element
    Die Artikelnummer der Stücklistenposition, in meinem Beispiel die 123 oder 456
  • Menge
    Gibt an, wie oft das Element in Stueckliste enthalten ist.

In meinem Beispiel hätte die Tabelle Stuecklisten folgende Datensätze:
Code:
Stueckliste|Element|Menge
    789   |  123  |  1
    789   |  456  |  2
Antworten
#12
Hi,
Zitat:Die Artikelnummer der Stückliste, in meinem Beispiel die 789
Das hat jetzt nix mit SQL zu tun, eher eine betriebswirtschaftliche Frage:
Wenn ich in meinem Shop einen Artikel erstelle welcher andere Artikel enthält, erstelle ich einen neuen Artikel, eigentlich wie bei Dir auch, aber der neue Artikel bekommt eine "Artikelnummer" und wie oben beschrieben erhalten die Stücklisteneinträge diese Artikelnummer als parent.
Es heißt dann aber weiterhin "Artikelnummer" und nicht "Stücklistennumer".

Hier ergibt sich die Frage ob Stückliste und Artikelnummer der gleiche Objekttyp sind, wenn ja würde ich sie auch so bennen.
(anmerkung: Eine Objekttypendatenbank kann hilfreich sein http://look-up.webfan.de/1.3.6.1.4.1.37553.8.1.8.3 )

Um zu Deinem praktischen Problem zurückzukommen:
- 789 wäre eine "Artikelnummer" wenn es sich um einen fest vorgegebenen bestellbaren Artikel handelt. (siehe Baum)
- Wäre es nicht vorgegeben, sondern erstellt sich die "Stückliste" für jede Bestellung neu, erstelle ich KEINE
Stückliste, sondern setze ich jede Artikelnummer mit Ihrere Mengenangabe auf eine "Rechnung" mit "Rechnungposten"
(Rechnung wäre hier Deine Stückliste, aber die bekommt eine Rechnungnummer, keine Stücklistenummer welche sich hier mit Deiner Artikelnummer "zu vermischen" scheint !!! ???)
EDIT:
- Stücklistennumer wäre bei mir Rechnunsgnummer, Stücklisteneintrag=Rechnungsposten != Artikelnummer
Antworten
#13
Hi,

Stücklistennummer soll nur verdeutlichen, dass es sich um eine Stückliste handelt!
Selbstverständlich haben Stücklisten eigene Artikelnummern, das habe ich aber alles zu Beginn beschrieben.
Das ergibt sich schon aus der Tatsache, dass eine Handelsstückliste - wie erwähnt - ein prinzipiell normal verkaufbarerer Standardartikel ist.

Dass "Handelsstücklisten" klar definiert sind, zeigt, dass der Begriff und was dahinter steckt in vermutlich jedem ERP-System zum Einsatz kommt.
Daher ging ich davon aus, das nicht im Detail erklären zu müssen.

Um Missverständnissen vorzubeugen, hier eine ziemlich kompakte Beschreibung zu Handelsstücklisten:
http://www.gfks.de/wp/wp-content/uploads_neu/datenblatt-handelsstueckliste.pdf

Dabei gehts jetzt gar nicht um die Handhabung innerhalb der Software. Ich denke jedoch dass der Flyer kurz aber deutlich erklärt, was Handelsstücklisten genau sind.
Von denen rede ich...


Zitat:- 789 wäre eine "Artikelnummer" wenn es sich um einen fest vorgegebenen bestellbaren Artikel handelt. (siehe Baum)
Grundsätzlich ja... Ist sie ja auch...

Zitat:Wäre es nicht vorgegeben, sondern erstellt sich die "Stückliste" für jede Bestellung neu, erstelle ich KEINE
Stückliste, sondern setze ich jede Artikelnummer mit Ihrere Mengenangabe auf eine "Rechnung" mit "Rechnungposten"
Hier fängt es leider an, komplett quer verstanden zu werden. Es wird nichts pro Bestellung erstellt! Eine Handelsstückliste ist ein Artikel, der wie jeder andere auch in jedem ERP-System unter den Stammdaten gepflegt wird. Die sind genau so bestellbar, wie jeder andere Artikel auch...

Zitat:(Rechnung wäre hier Deine Stückliste, aber die bekommt eine Rechnungnummer, keine Stücklistenummer welche sich hier mit Deiner Artikelnummer "zu vermischen" scheint !!! ???)
EDIT:
- Stücklistennumer wäre bei mir Rechnunsgnummer, Stücklisteneintrag=Rechnungsposten != Artikelnummer
Nein... Du kannst bei mir folgende Artikel(nummern!) bestellen:
  • 123
  • 456
  • 789
Das sind für Dich als Endkunde ganz einfach Artikel, mehr nicht!
Dass sich intern die 789 aus der 123 und 456 zusammensetzt siehst Du als Kunde ja erst mal nicht und geht Dich ja auch nichts an.
Du willst das geliefert bekommen, was die 789 beschreibt, die Du bestellt hast.

Jetzt wieder der Blick in die Warenwirtschaft:
Es wird ein Beleg angelegt mit einer (Artikel!)Position 789 (<- Artikelnummer!).
Endkunde bekommt über den gesamten Bestellprozess betrachtet eine Auftragsbestätigung, Lieferschein und Rechnung.
In allen drei Belegen ist die 789 als Artikelnummer geführt, denn es ist ja auch ein Artikel!

Da aber unter der Artikelnummer 789 physikalisch einmal die 123 und zweimal die 456 an den Kunden geliefert wurden, muss ich bei einer Verkaufsanalyse über den Einzelartikel 456 eben auch die Verkäufe der 789 berücksichtigen!
Und hier eben auch die Anzahl, die die 456 der 789 zugewiesen sind ( also * zwei! ).


Gruß Arne
Antworten
#14
Hi Arne,
ah, ok verstehe.

Und hast Du den Query jetzt hinbekommen?

mfg
Till
Antworten
#15
Leider noch nicht, aber bin die letzten Tage auch nicht weiter dazu gekommen...
Antworten
#16
Och mennö verdammt...

Das sieht doch aus wie eine 0815-Aufgabe?
Klappt es nicht mit einem simpen join?

Sorry ich bin leider dennoch hier raus, ich hab grad nur mysql und mariadb zum testen, keine Ahnung von MSSQL/T-SQL, dachte nur die Prinzipien wären vergleichbar?

Ok, wie oben schon gesagt, wenn Stückliste eine Artikelnummer ist würde ich es auch so benennen, der Übersicht halber.

SELECT SUM(st.menge) from stuecklisten as st JOIN verkaufsposten as vk on st.stueckliste=vk.artikelnummer where vk.artikelnummer='0815'

Wie schon gesagt, habe grad kein MSSQL/T-SQL deshalb finde ich auch das Problem nicht irgendwie, sorry.
Antworten
#17
Zitat:Das sieht doch aus wie eine 0815-Aufgabe?
Sehe ich grundsätzlich auch so.
Zitat:Klappt es nicht mit einem simpen join?
Nein, sonst wäre es ja schon längst gelöst...
Es wird relativ einfach sein, nur denke ich vermutlich zu kompliziert oder falsch.

Zitat:Ok, wie oben schon gesagt, wenn Stückliste eine Artikelnummer ist würde ich es auch so benennen, der Übersicht halber.
Die Spaltenbezeichner sind so vorgegeben, wie ich sie gepostet habe, daher sind auch die Beispiele so benannt.
Der Spaltenbezeichner "Stückliste" steht für eine Artikelnummer pro Datensatz, ebenso wie der Spaltenbezeicher "Element".
Es macht für mich keinen Sinn, da jetzt für das Beispiel alles umzubenennen.

Zitat:SELECT SUM(st.menge) from stuecklisten as st JOIN verkaufsposten as vk on st.stueckliste=vk.artikelnummer where vk.artikelnummer='0815'
Das ist ja leider nicht das, was ich brauche. Suche ich bspw. nach der 456 würde NULL rauskommen, denn eine Stückliste mit der Artikelnummer gibt es nicht!
Mir geht es aber genau um die 456. Die Verknüpfung muss über das Stücklistenelement passieren, also eher so rum:
Code:
SELECT SUM(st.menge) from stuecklisten as st JOIN verkaufsposten as vk on st.element=vk.artikelnummer where vk.artikelnummer='0815'
, was aber auch zu falschen Ergebnissen führt.

Zudem fehlt mir dann immer noch der Kernpunkt meiner Frage:
Die 456 ist zweimal in der 789 enthalten, wenn ich also nach der 456 auswerten will, muss ein Verkauf der 789 doppelt ausgewertet werden!

Gruß Arne
Antworten
#18
select sum(anzahl) from
(select count(*) as anzahl from verkaufsposten where art_nr = '0815'
union
select count(*) as anzahl from verkaufsposten t
join stuecklisten tt  on t.art_nr = tt.art_nr and art_nr2  = '0815' ) as temp

Zu spät gesehen, daß du ein Mengenfeld in der Tabelle hast? Dann halt sum statt count in der zweiten Abfrage.
Antworten
#19
(12.02.2017, 20:40)Arne Drews schrieb:
Zitat:SELECT SUM(st.menge) from stuecklisten as st JOIN verkaufsposten as vk on st.stueckliste=vk.artikelnummer where vk.artikelnummer='0815'
Das ist ja leider nicht das, was ich brauche. Suche ich bspw. nach der 456 würde NULL rauskommen, denn eine Stückliste mit der Artikelnummer gibt es nicht!
Mir geht es aber genau um die 456. Die Verknüpfung muss über das Stücklistenelement passieren, also eher so rum:


Code:
SELECT SUM(st.menge) from stuecklisten as st JOIN verkaufsposten as vk on st.element=vk.artikelnummer where vk.artikelnummer='0815'
, was aber auch zu falschen Ergebnissen führt.

Zudem fehlt mir dann immer noch der Kernpunkt meiner Frage:
Die 456 ist zweimal in der 789 enthalten, wenn ich also nach der 456 auswerten will, muss ein Verkauf der 789 doppelt ausgewertet werden!

Gruß Arne

Mh, und 1 oder 2 OR?

Code:
SELECT SUM(st.menge) from stuecklisten as st JOIN verkaufsposten as vk on (st.element=vk.artikelnummer OR  st.stueckliste=vk.artikelnummer) where  (vk.artikelnummer='0815' OR ...)
Antworten


Gehe zu: