Neu SQL Abfrage - Management Studio

ninoboender

Gut bekanntes Mitglied
3. August 2014
174
1
Hallo zusammen,

ich möchte die Anzahl an „Artikelpositionen“ wissen:

wo das Produkt„Hinweis“ leer ist und nicht die Artnr. „mug“ - „matte“ - „wm-htp“ entspricht und der Auftrag nicht zurückgehalten oder versendet ist

Ich würde mich über ein Feedback freuen :)

Gruß Nino Boender
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
402
Hi Nino,

versuch's mal hiermit ...
Code:
SELECT COUNT(kBestellPos) FROM tbestellpos AS t1
    INNER JOIN tBestellung AS t2 ON t2.kBestellung=t1.tBestellung_kBestellung
    WHERE cHinweis='' AND cArtNr NOT LIKE 'mug' AND cArtNr NOT LIKE 'matte' AND cArtNr NOT LIKE 'wm-htp'
        AND nKomplettAusgeliefert=0 AND kRueckhalteGrund=0

Zwei kleine Erläuterungen...

1. Der Code prüft mit NOT LIKE, ob die Artikelnummer die gewünschten Ausschlüsse enthält, nicht ob die Artikelnummer einer der Ausschlüsse ist. Der SQL Code würde also z.B. auch bei einer Artikelnummer "Bastmatten" anschlagen. Willst Du das nicht, musst Du stattdessen cArtNr='matte', usw. schreiben.

2. Bestellungen, zu denen noch gar keine (Teil-)Lieferung stattgefunden hat, haben in der Tabellenspalte dLieferdatum den Wert NULL stehen, sind also leer. Du schreibst oben, dass die Bestellung "nicht versendet" sein soll. Ich würde das so verstehen wie "Versand abgeschlossen", deshalb habe ich die Tabellenspalte nKomplettAusgeliefert verwendet.

Willst Du aber stattdessen nur Bestellpositionen gezählt haben, die zu Bestellungen gehören, die noch gar keine (Teil-)Lieferung hatten, änderst Du nKomplettAusgeliefert=0 einfach in dLieferdatum IS NULL ab.

Gruß,
Ingmar
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
402
Das oben ist nur die SQL Abfrage selbst. Anders als bei den meisten SQL Tools musst Du im SQL Sever Mgmt Studio vorher noch explizit den DB Kontext setzen, also das hier vorneweg (1x) eingeben ...
Code:
USE eazybusiness
GO
 

ninoboender

Gut bekanntes Mitglied
3. August 2014
174
1
ja super, kann man das auch "zeitliche" noch was eingrenzen? z.b. ab 1.11.2017 November bis heute? sorry für das hin und her....
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
402
Hi Nino,

ja klar, hier also dann das "Gesamtkunstwerk" ...
Code:
USE eazybusiness
GO
SELECT COUNT(kBestellPos) FROM tbestellpos AS t1
    INNER JOIN tBestellung AS t2 ON t2.kBestellung=t1.tBestellung_kBestellung
    WHERE cHinweis='' AND cArtNr NOT LIKE 'mug' AND cArtNr NOT LIKE 'matte' AND cArtNr NOT LIKE 'wm-htp'
        AND nKomplettAusgeliefert=0 AND kRueckhalteGrund=0
        AND CONVERT(date,t2.dErstellt) > CONVERT(date,'2017-11-01')

Die Datumsvergleiche in SQL sind sehr flexibel. Das hier oben ist eine sichere Variante, gehen würde aber auch rechts vom ">" einfach nur '20171101' stehen zu haben, etc.
Ich würde an Deiner Stelle aber bei der sicheren Variante bleiben, die ist letzlich auch übersichtlicher.

Gruß,
Ingmar
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
402
Ja, das tut er nur dann nicht, wenn man ihm sagt, dass er das nicht soll, von alleine kommt er nicht darauf ... :)
Probier's mal selber, die Spalte heißt nType, Freipositionen haben den Wert 0, Versandpositionen den Wert 2.
 

ninoboender

Gut bekanntes Mitglied
3. August 2014
174
1
so würde es aussehen, macht das sinn?

USE eazybusiness
GO
SELECT COUNT(kBestellPos) FROM tbestellpos AS t1
INNER JOIN tBestellung AS t2 ON t2.kBestellung=t1.tBestellung_kBestellung
WHERE cHinweis='' AND cArtNr NOT LIKE 'mug' AND cArtNr NOT LIKE 'matte' AND cArtNr NOT LIKE 'wm-htp'
AND nKomplettAusgeliefert=0 AND kRueckhalteGrund=0 AND nType=1
AND CONVERT(date,t2.dErstellt) > CONVERT(date,'2017-11-01')
 
Zuletzt bearbeitet:

ninoboender

Gut bekanntes Mitglied
3. August 2014
174
1
kann es sein, dass er mit der Suche AND cArtNr NOT LIKE 'mug' - "NUR" nach Mug sucht, nicht aber z.b. "mug-black" als Artnr. beachtet bei dieser Ausschluss-Suche?
 

Ähnliche Themen