2016-04-25 4 views
2

まず、このクエリを並べ替えるためにあらゆるところを調査しましたが、ここで問題を解決した回答は見つかりません。0で除算するカウント

私はこのクエリを持っている:私はコピーを念頭に置い

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] 

クマと年の数ヶ月のために結果を取得するには、このクエリを貼り付けます。私が期待している結果は、私の上司がこの情報を毎月必要とするが、[standing_load]の値が0になるたびに、どれくらいのフィールドが 'green'、 'yellow'、 'red' [total_ahr_cap]の値は0です - ゼロによる除算エラーが発生します。

NULLの値に変更できないため、数値を0で割った数値を再計算する必要があります。ゼロを除算するとエラーが発生するたびにこの問題を回避するにはどうすればよいですか? 0インチの数字のうち、NULLの値に変更する必要がありますが、それは不正確なデータを与えています。あなたが見ることができるように、それは0の値を持っている月のすべての他の月数えなく

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 

クエリがどのように見えるか、下記を参照してください。

お願いします!

+1

必要にsumとヌルにカウント数を変更したい場合、私はわからないので、小さなアドバイス合計はカウントされません –

+0

@ ZahiroMorだから私は合計のためのカウントを変更するのですか? –

+1

は基本的にはそうです。私の答えをチェックする - 私は数値の値から引用符を取り除き、[standing_load]を追加することなどのいくつかの点を変更しました。それを試してください:) –

答えて

2

を試してみてください?

また、お客様の第5回caseにはelse部分がありません。以下

を参照してくださいコード:

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] 
また

それはあなたのソリューションでは許容ですが、私は0

+0

これは私がもう偉大ですが、0値のカウントは404ですが、セルの総量は384です除数または被除数のいずれかに0の値を持つような10-20個のセルしかありませんか? –

+0

CASEは 'THEN 1 ELSE NULL END'で終わらないはずですか? –

+0

@RichBennerあなたは話していますか? –

0

は、文字列に数値を比較する理由を分周器がまた0よりも大きい場合は、最初の除算演算を行うそれぞれの場合にチェックし、クエリあなたにDivide by 0例外を回避するには、この

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

それはまだ私にこの1つの仲間に0エラーで割り算を与える –

関連する問題