2016-04-25 21 views
2

Zuerst habe ich überall recherchiert, um diese Abfrage sortiert zu bekommen und ich kann keine Antwort finden, die mein Problem so gelöst hat, hier ist es.Graf Division durch 0

Ich habe diese Anfrage:

SELECT 
    [Report Date], 
    COUNT(CASE WHEN [total_ahr_cap] = '0' OR [standing_load] = '0'THEN NULL ELSE 1 END) AS [Zero Values], 
    COUNT(CASE WHEN [total_ahr_cap]/[standing_load] > '12' THEN 1 ELSE NULL END) AS [Green Zone], 
    COUNT(CASE WHEN [total_ahr_cap]/[standing_load] < '12' AND [total_ahr_cap]/[standing_load] >= '10' 
      THEN 1 ELSE NULL END) AS [Yellow Zone], 
    COUNT(CASE WHEN [total_ahr_cap]/[standing_load] < '10' THEN 1 ELSE NULL END) AS [Red Zone], 
    COUNT(CASE WHEN [total_ahr_cap] IS NULL OR [standing_load] IS NULL THEN 1 END)AS [Null Values], 
    COUNT(CASE WHEN [total_ahr_cap]/[standing_load] > '0' THEN 1 ELSE NULL END) AS [Total] 


FROM [dbo].[dc_chargers$] 
WHERE [Report Date] = 'March 2016' AND sla_no NOT LIKE ('%South%') 
GROUP BY [Report Date] 

Beachten Sie, dass ich kopieren und diese Abfrage einfügen, um Ergebnisse für mehrere Monate des Jahres zu erhalten. Das Ergebnis, das ich erwarte, ist die Anzahl der Felder, die in die Felder 'grün', 'gelb', 'rot' und 'null' fallen, da meine Chefs diese Information jeden Monat benötigen, aber immer wenn der [standing_load] Wert oder der [total_ahr_cap] Werte sind 0 - Ich bekomme einen Fehler durch Division durch Null.

Ich brauche die Anzahl der Zahlen, die durch 0 geteilt werden, da ich sie nicht in NULL Werte ändern kann, wie kann ich das umgehen, wie jedes Mal, wenn ich die Division durch Null Fehler die Abfrage nicht den Monat zählen der Zahlen, die die 0 haben und ich muss sie zu NULL Wert ändern, aber das gibt mir ungenaue Daten.

siehe unten, was die Abfrage sollte wie folgt aussehen:

Report Date  Green Zone Yellow Zone Red Zone Null Values Total 
2015-12-01   276   5   5   16  286 
2016-01-01   365   5   5   24  375 
2016-02-01   376   4   5   25  384 

wie Sie sehen können, ist es, alle anderen Monate zählt, aber nicht den Monat, hat 0 Werte.

bitte helfen!

+1

Sie ändern müssen Summen zählt nicht –

+0

@ZahiroMor also ändere ich nur die Anzahl für die Summe? –

+1

grundsätzlich - ja. Überprüfe meine Antwort - ich habe ein paar Dinge geändert, wie das Entfernen von Anführungszeichen aus Zahlenwerten und das Hinzufügen von [standing_load] ist nicht null. versuchen Sie es :) –

Antwort

2

Divide by 0 Ausnahme Um zu vermeiden, in die Sie in jedem Fall fragen, wo Sie zuerst teilen Sie Betrieb überprüfen, ob Teiler als 0 ist auch größer ist, warum Zeichenfolge numerische Werte zu vergleichen?

Auch Ihre 5. case fehlt else Teil.

Siehe Code unten:

SELECT 
    [Report Date], 
    COUNT(CASE WHEN [total_ahr_cap] = 0 OR [standing_load] = 0 THEN NULL ELSE 1 END) AS [Zero Values], 
    COUNT(CASE WHEN [standing_load] > 0 and [total_ahr_cap]/[standing_load] > 12 THEN 1 ELSE NULL END) AS [Green Zone], 
    COUNT(CASE WHEN [standing_load] > 0 and [total_ahr_cap]/[standing_load] < 12 AND [total_ahr_cap]/[standing_load] >= 10 
      THEN 1 ELSE NULL END) AS [Yellow Zone], 
    COUNT(CASE WHEN [standing_load] > 0 and [total_ahr_cap]/[standing_load] < 10 THEN 1 ELSE NULL END) AS [Red Zone], 
    COUNT(CASE WHEN [standing_load] > 0 and [total_ahr_cap] IS NULL OR [standing_load] IS NULL THEN 1 ELSE NULL END)AS [Null Values], 
    COUNT(CASE WHEN [standing_load] > 0 and [total_ahr_cap]/[standing_load] > 0 THEN 1 ELSE NULL END) AS [Total] 


FROM [dbo].[dc_chargers$] 
WHERE [Report Date] = 'March 2016' AND sla_no NOT LIKE ('%South%') 
GROUP BY [Report Date] 

auch eine kleine Beratung, weil ich nicht sicher bin, ob es akzeptabel, in Ihrer Lösung ist, aber ich würde Zählung sum und Nullen auf 0

+0

Auf diesem einen bekomme ich nicht den Fehler mehr, der ist toll, aber die Zählung von 0 Werten ist 404, aber die Gesamtmenge der Zellen ist 384 und ich sollte nur wie 10-20 Zellen, die den Wert von 0 entweder im Divisor oder Dividenden haben? –

+0

Sollte dieser CASE nicht mit 'THEN 1 ELSE NULL END' enden? –

+0

@RichBenner über welche CASE sprichst du? –

0

versuchen diese

SELECT 
    [Report Date], 
    sum(CASE WHEN [total_ahr_cap] = 0 OR [standing_load] = 0 THEN 1 ELSE 0 END) AS [Zero Values], 
    sum(CASE WHEN [total_ahr_cap]/[standing_load] > 12 and [standing_load] is not null THEN 1 ELSE 0 END) AS [Green Zone], 
    sum(CASE WHEN [total_ahr_cap]/[standing_load] < 12 AND [total_ahr_cap]/[standing_load] >= 10 and [standing_load] is not null 
      THEN 1 ELSE 0 END) AS [Yellow Zone], 
    sum(CASE WHEN [total_ahr_cap]/[standing_load] < 10 and [standing_load] is not null THEN 1 ELSE 0 END) AS [Red Zone], 
    sum(CASE WHEN [total_ahr_cap] IS NULL OR [standing_load] IS NULL THEN 1 ELSE 0 END) AS [Null Values], 
    sum(CASE WHEN [total_ahr_cap]/[standing_load] > 0 and [standing_load] is not null THEN 1 ELSE 0 END) AS [Total] 

FROM [dbo].[dc_chargers$] 
WHERE [Report Date] = 'March 2016' AND sla_no NOT LIKE ('%South%') 
GROUP BY [Report Date] 
+0

es gibt mir immer noch die Division von 0 Fehler auf diesem einen Kumpel –