Hallo,
ich habe im Versandkostenmodul folgendes eingebaut:
MAX(a.topseller) as has_topseller, MAX(at.attr3) as has_comment, MAX(b.esdarticle) as has_esd, MAX(at.attr8=„Lager1“) AS Lager1, MAX(at.attr8=„Lager2“) AS Lager2, MAX(at.attr8="") AS KeinLager
→ Leider wird der Eintrag MAX(at.attr8="") AS KeinLager ignoriert.
Wie kann ich abfragen, dass wenn in attr8 kein Eintrag erfolgt ist, dass dann KeinLager gelten soll?
Vielen Dank
Leider hat du nicht näher erläutert, was du erreichen willst.
Zur Frage: um sicher zu erkennen, ob eine Spalte einen Wert hat oder nicht, eignet sich folgendes SQL-Statement:
MAX(ISNULL(NULLIF(at.attr8, " "))) AS KeinLager
Damit funktioniert das sicher wenn der Spaltenwert Null, einen Leerstring oder ein Leerzeichen enthält. Das Leerzeichen im zweiten Parameter von Nullif soll so. Dazu muss man wissen, das SQL beim Vergleich von zwei unterschiedlich langen Strings den kürzeren mit Leerzeichen zunächst auf gleiche Länge bringt. Nullif vergleicht den ersten mit dem zweiten Parameter, und liefert bei Gleichheit Null zurück. Ansonsten wird der erste Parameter zurückgegeben. Das Ergebnis ist also Null, wenn at.attr8 einen Leerstring oder Space enthält, ansonsten der Spaltenwert (bei Null also auch Null, ansonsten eben “Lager1” oder was auch immer. IsNull liefert 1 (True) wenn der Wert Null ist. Und das MAX() liefert den höchsten Wert über alle Artikel im Warenkorb. Wenn also mindestens ein Artikel im Warenkorb keinen Wert in at.attr8 hat, wird KeinLager gesetzt (1=true).
Wenn der Wert nur “Lager1” oder “Lager2”sein kann, würde ich jedoch gar nicht auf leer abfragen, für den Fall dass in attr8 ein sonstiger (falscher) Wert steht. Prüfe dann in deiner Versandregel auf !Lager1 AND !Lager2