2016-04-29 17 views
1

Ich habe die folgende SQL-Abfrage:MySQL - Gruppe von Nullwert

SELECT date_format(sfo.shipping_arrival_date,"%m.%Y") AS Month, 
     date_format(sfo.shipping_arrival_date,"%v") AS Week, 
     date_format(sfo.shipping_arrival_date,"%d.%m.%Y") AS Shipping Day, 
     CASE 
      WHEN sfo.coupon_code IS NOT NULL THEN sfo.coupon_code 
      ELSE 'no Code' 
     END as Coupon, 
     sfo.coupon_rule_name, 
     sfo.grand_total AS Endsumme, 
     sfo.base_subtotal + sfo.shipping_incl_tax AS Sum_Incl_Shipping, 
     sfo.discount_amount, 
     count(sfo.entity_id) AS uses 
FROM sales_flat_order AS sfo 
WHERE sfo.status <> 'canceled' 
GROUP BY Coupon 
ORDER BY sfo.shipping_arrival_date DESC 

In sfo.coupon_code sind Werte „NULL“ vorhanden, aber die Abfrage listet sie nicht als „keinen Code“ im Ergebnis. Ich möchte eine Liste der gruppierten Gutscheincodes und der relevanten Werte.

Weiß jemand, warum ich den Wert "kein Code" in meinem Ergebnis nicht finden kann?

Danke.

+0

was ist das Ergebnis? Gibt es die gleichen Nullwerte im Gutschein zurück? – sravs

+0

Wenn Sie die GROUP BY-Klausel weglassen, erhalten Sie irgendwelche Ergebnisse mit 'no Code' für den Gutscheincode? Sie haben möglicherweise keine NULL-Werte in dieser Ergebnismenge. –

+0

Ich habe keinen "Code" in der Ergebnismenge. Wenn ich die group by-Klausel entferne, sehe ich eine Zeile mit "no Code", aber jede andere Spalte ist null. – Torben

Antwort

0

Meine Ahnung ist, dass Sie nur NULL Werte für coupon_code für die Datensätze mit sfo.status = NULL haben, die aus Ihrem Ergebnissatz weggelassen werden.

Versuchen Sie es mit der folgenden Abfrage:

SELECT date_format(sfo.shipping_arrival_date,"%m.%Y") AS Month, 
     date_format(sfo.shipping_arrival_date,"%v") AS Week, 
     date_format(sfo.shipping_arrival_date,"%d.%m.%Y") AS Shipping Day, 
     CASE 
      WHEN sfo.coupon_code IS NOT NULL THEN sfo.coupon_code 
      ELSE 'no Code' 
     END as Coupon, 
     sfo.coupon_rule_name, 
     sfo.grand_total AS Endsumme, 
     sfo.base_subtotal + sfo.shipping_incl_tax AS Sum_Incl_Shipping, 
     sfo.discount_amount, 
     count(sfo.entity_id) AS uses 
FROM sales_flat_order AS sfo 
WHERE sfo.status <> 'canceled' OR sfo.status IS NULL 
GROUP BY Coupon 
ORDER BY sfo.shipping_arrival_date DESC 
0

I COALESCE anstelle eines CASE verwenden würde ...

... 
COALESCE(sfo.coupon_code,'no Code') AS Coupon 
... 
GROUP BY Coupon 

... weil COALESCE Ausdruck eine syntaktische Abkürzung für den CASE-Ausdruck ist und als solche ist viel klarer und prägnanter