ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?
スポンサーサイト(詳細
  • Java個別指導IT-Lab. - 誰でも最初は未経験。個別指導でプロへの道が開けます。随時入校可能

質問

QNo.4004346 グループ化データの割り算について
質問者:AS400VBNET SQLSERVER 言語 VB VS2008

いつも勉強させていただいています。
SQL文で 「0 除算エラーが発生しました。」 が出て、困っています。
アドバイスお願いいたします。

SQL文

COUNT(CASE WHEN CONVERT(CHAR(10), 納期, 111) = GETDATE() _
AND 入荷数 = 0 THEN 0 ELSE NULL END) _
/ _
COUNT(CASE WHEN CONVERT(char(10), 納期, 111) = GETDATE() _
THEN 0 ELSE NULL END) * 100 AS '遅延率(%)'

・・・GROUP化

わかりずらいのですが、期間内の入荷数/全体数で割っています。
COUNTでも駄目でした。
個々のデータは取得できます。下記

COUNT(CASE WHEN CONVERT(CHAR(10), 納期, 111) = GETDATE() _
AND 入荷数 = 0 THEN 0 ELSE NULL END) AS 未入荷計

何か良い方法が御座いましたらご指導くださいませ。
よろしくお願いします。
困り度:
  • 困っています
質問投稿日時:
08/05/07 15:34
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.1 ワンクッション入れて、全体数がゼロだった場合に遅延率を0かNULLにすれば
いいのではないでしょうか。

SELECT CASE WHEN 全体計=0 THEN NULL ELSE 未入荷計/全体計*100 END AS '遅延率(%)'
FROM
(SELECT
COUNT(CASE WHEN CONVERT(CHAR(10), 納期, 111) = GETDATE()
AND 入荷数 = 0 THEN 0 ELSE NULL END) AS 未入荷計,
COUNT(CASE WHEN CONVERT(char(10), 納期, 111) = GETDATE()
THEN 0 ELSE NULL END) AS 全体計
FROM ...
回答者:nora1962
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/07 16:34
この回答へのお礼ありがとう御座います解決しました。

除算をする場合にデータ/0の場合にエラーになるようです。実データでその条件が出なければOKだと思っていました。

それを回避するようにCASE文を入れました。

参考になりました。
 
スポンサーサイト(詳細
  • Java個別指導IT-Lab. - 誰でも最初は未経験。個別指導でプロへの道が開けます。随時入校可能