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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4019271749
Url: https://administrator.de/forum/sql-abweichung-bestellpreis-4019271749.html
Ausgedruckt am: 19.05.2025 um 08:05 Uhr
7 Kommentare
Neuester Kommentar
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
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
Moin,
als erstes benötigst du die Tabellenstruktur der Tabellen
Die kannst du ja beispielsweise mal mit
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
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
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
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.