dedlfix: SQL Abfrage

Beitrag lesen

Hi!

Bin gerade drüber, "Zwischenschritte" zu summieren, d. h. in etwa so:

[...]

COUNT(IF(item_status = 74, "Warten auf Daten", NULL)) 'Warten auf Daten',
COUNT(IF(item_status = 82, "Warten auf Kunden", NULL)) 'Warten auf Kunden',
COUNT('Warten auf Daten' + 'Warten auf Kunden') 'Kunde im Verzug allgemein'

  
Deine Erwartungshaltung ist eine andere als MySQLs tatsächliche Arbeitsweise. 'foo' ist ein String, kein Spaltennamen und auch kein Aliasname. Wenn du 'Warten auf Daten' + 'Warten auf Kunden' notierst, macht MySQL daraus eine Addition zweier Zahlen. 'Warten auf Daten' ist ein String, 'Warten auf Kunden' auch, beide evaluieren im nummerischen Kontext (kommt durch das +) zu 0. Der Ausdruck ergibt also 0 + 0 => 0. COUNT() prüft nur, ob das übergebenen Argument ein von NULL verschiedener Wert ist (oder \*) und zählt oder zählt nicht. Und zwar den aktuellen Datensatz. Da dein Ausdruck einen von NULL verschiedenen Wert ergibt, zählt es alle Datensätze, die die WHERE-Bedungung erfüllen. Das ist der gleiche Effekt, wie wenn du COUNT(\*) oder COUNT(0) schreibst.  
  
Wenn du Werte mit den Status 74 oder 82 zählen willst, musst du stattdessen die IF()-Funktion entsprechend bestücken:  
  COUNT(IF(item\_status IN (74, 82), 1, NULL))  
(Anstelle der 1 einen String anzugeben bringt keinerlei Vorteile, zumal du die Bedeutung des Status ja auch schon im Aliasnamen stehen hast.  
  
  
Lo!