나는 SQLServer를 오랫동안 사용 해왔고, 실제로 시도하기 전에 문자열 값에 유효한 날짜가 포함되어 있는지 확인하는 등의 일을 할 수있는 lazy evaluation을 사용하여 CASE 표현식에 대한 아이디어를 얻었습니다 그것을 변환하십시오.case in SQL
오늘 나는 이것이 사실이 아닌 것처럼 보이는 시나리오를 발견했습니다. 내가 기대하는 것처럼
select b, sum(case when b<> 0 then a/b end)
from (
select 1 as a, 1 as b union select 1, 0 union select 0, 1
) x group by b
이 잘 작동 : 일부 단순화 한 후,이 (계산에 어떤 의미 그냥 바보 예를 찾으려고하지 않음)을 표시 할 수있는 쉬운 예입니다.
select b, case when b<> 0 then sum(a/b) end
from (
select 1 as a, 1 as b union select 1, 0 union select 0, 1
) x group by b
오류 (제로가 나옴)가 표시됩니다.
집계 함수와 관련이있는 것으로 보입니다. 어쨌든 합계는 사례가 나오기 전에 평가되지만, 무엇인가를 놓치고 있어야하며 무엇을 모르는 것이 좋습니다.
몇 가지 해결 방법이 있으며 실제 문제가 없으므로이 문제에 대해 대부분 궁금합니다.
그런데 필자는 SQLServer2005와 SQLServer2008에서 테스트 한 다음 오라클 11g에서 항상 동일한 결과를 테스트했습니다.