ignari
Goto Top

SQL Abweichung Bestellpreis

Hallo zusammen,

ich bin blutiger Anfänger in MS SQL und stehe vor einer Herausforderung, die meine Basics übersteigt.

Ich haber eine aktuelle Bestellung (Tabelle Bestellungen) mit Artikeln(Tabelle Bestellpositionen).
Nun soll folgendes abgefragt werden
- ob es zu diesen Artikeln(ArtikelNr. in den Letzten 365 Tagen bereits Bestellungen gab
- welches die jeweils neueste Bestellung(BestellNr) zu diesen Artikeln ist
- ob der Bestellpreis(Preis) der Positionenen(ArtikelNr) der aktuellen Bestellung um mehr als +-20% zum Preis der jeweils letzten Bestellung abweicht
- die aktuelle Bestellung soll dabei ignoriert werden

Ich hoffe, dass die Informationen ausreichend sind, um ein paar Tips zu erhalten.


Viele Grüße und vielen Dank für jeglichen Hinweis

Content-Key: 4019271749

Url: https://administrator.de/contentid/4019271749

Printed on: April 26, 2024 at 14:04 o'clock

Member: Crusher79
Crusher79 Sep 22, 2022 at 09:49:19 (UTC)
Goto Top
Hallo,

ja sowas geht. So müssten wir hier aber das Raten anfangen: Spalten mit ID, Nr, Artikelbezeichnung? Wie lauten denn die Überschriften?

Der Tip wäre sonst: schreib ein Query und fertig.

Wenn wir dir helfen oder einen Code Schnipsel rein reichen sollen brauchen wir mehr Informationen übern den Aufbau der Tabellen.

Im ERP System nennt sich sowas auch Material-Bewegung. Es gibt also mitunter noch eine weitere Tabelle die man anzapfen kann. Als Basis würden die von dir genannte für ein Query aber reichen.

mfg Crusher
Member: em-pie
em-pie Sep 22, 2022 updated at 10:02:25 (UTC)
Goto Top
Moin,

als erstes benötigst du die Tabellenstruktur der Tabellen
  • Artikel (für die Stammdaten)
  • Bestellpositionen
  • Bestellung

Die kannst du ja beispielsweise mal mit
SELECT TOP 50 * FROM artikel
abfragen

Dann musst du dich mich
beschäftigen.

Arbeite dich damit mal ein und dann können wir dir helfen - sofern du Scriptbeispiele postest

Gruß
em-pie
Member: ignari
ignari Sep 22, 2022 at 10:04:57 (UTC)
Goto Top
Zitat von @Crusher79:

ja sowas geht. So müssten wir hier aber das Raten anfangen: Spalten mit ID, Nr, Artikelbezeichnung? Wie lauten denn die Überschriften?

Wenn wir dir helfen oder einen Code Schnipsel rein reichen sollen brauchen wir mehr Informationen übern den Aufbau der Tabellen.

Im ERP System nennt sich sowas auch Material-Bewegung. Es gibt also mitunter noch eine weitere Tabelle die man anzapfen kann. Als Basis würden die von dir genannte für ein Query aber reichen.

mfg Crusher

Ich bin mir nicht sicher, ob ich Dein Kommentar korrekt deute.
Die Tabellen sind über die BestellNr miteinander verbunden. Join konnte ich also über B.BestellNr und P.BestellNr(fkey) umsetzen.
Abgefragt werden sollen die Spalten:
BestellNr - PONR., ArtikelNr. - PANR, BestellPreis - PPRC

Weitere Tabellen sollten nicht relevant sein.
Member: ukulele-7
ukulele-7 Sep 22, 2022 at 10:28:23 (UTC)
Goto Top
SELECT
b1.*,
p1.*,
p3.*, --nach Bedarf
100 / p3.Stückpreis * p1.Stückpreis AS Abweichung --nach Bedarf
FROM Bestellungen b1
INNER JOIN Bestellpositionen p1
ON b1.BestellNr = p1.BestellNr
LEFT JOIN 
(
SELECT
ROW_NUMBER() OVER (PARTITION BY p2.ArtikelNr ORDER BY b2.BestellDatum DESC) AS zeile,
p2.*
FROM Bestellpositionen p2
INNER JOIN Bestellung b2
ON p2.BestellNr = b2.BestellNr
WHERE p2.BestellNr != p1.BestellNr
AND b2.BestellDatum >= dateadd(day,-365,getdate())
) p3
ON p1.ArtikelNr = p3.ArtikelNr
AND p3.zeile = 1
Member: ukulele-7
ukulele-7 Sep 22, 2022 at 10:34:13 (UTC)
Goto Top
PS: Das kann aber mit vielen Daten je nach Index richtig laufzeitintensiv werden.
Member: ignari
ignari Sep 22, 2022 at 11:11:42 (UTC)
Goto Top
Ich werde mich einmal daran versuchen, vielen Dank.
Member: ukulele-7
ukulele-7 Sep 22, 2022 at 11:43:19 (UTC)
Goto Top
Es gibt da sicher noch Optimierungsbedarf aber erstmal muss das laufen. Z.B. fällt mir jetzt spontan ein das auch Bestellungen neuer als die aktuelle Bestellung herangezogen werden. Auch würde ich nicht 365 Tage sondern 1 Jahr wählen oder diese Einschränkung ganz entfallen lassen zu Gunsten eines angezeigten Datums der letzten Bestellung. Es gibt viele Möglichkeiten zum Feintuning.