私はおそらく NULL を使用して計算不能を表しますが、それは問題のドメインでの意図に依存します (コードは何が起こっているかを示すために展開されています)。
SELECT SUM(convert(decimal(3,2),
CASE WHEN Status_ID = 1 AND State_ID = 14 THEN 1 ELSE 0 END)
)
/
NULLIF(
SUM(convert(decimal(3,2),
CASE WHEN State_ID = 14 THEN 1 ELSE 0 END)
)
, 0
)
* 100
FROM SomeTable
テーブルに行がないため分母がゼロになる結果は、NULL に変換されるため、式全体が NULL になります。
そのコードも少し単純化できます (おそらく、すでに単純化されたおもちゃの問題だからです)。
SELECT SUM( convert(decimal(3,2), CASE WHEN Status_ID = 1 THEN 1 ELSE 0 END) )
/
NULLIF( convert(decimal(3,2), COUNT(*)), 0 )
* 100
FROM SomeTable
WHERE State_ID = 14
多数の異なるものを 1 つのクエリに結合する例として、次のようにします。
SELECT CASE WHEN State_ID = 14 THEN 'State_ID = 14'
WHEN State_ID IN (1, 2, 3) THEN 'State_ID IN (1, 2, 3)'
ELSE 'DEFAULT'
END AS Category
,SUM(convert(decimal(3,2),
CASE WHEN Status_ID = 1 THEN 1 ELSE 0 END)
)
/
convert(decimal(3,2), COUNT(*))
* 100
FROM SomeTable
GROUP BY CASE WHEN State_ID = 14 THEN 'State_ID = 14'
WHEN State_ID IN (1, 2, 3) THEN 'State_ID IN (1, 2, 3)'
ELSE 'DEFAULT'
END