Я не совсем понимаю, почему эти два разных примера кода возвращают разное значение.
как-то неверно, но работает синтаксис, возвращает ложные результаты, например, возвращается 0
, когда сравнение выполняется за дваравные значения:
(SELECT CASE
WHEN
SUM(V.IsCompatible) OVER
(PARTITION BY ComputerName, UserID) = ApplicationCount
THEN 1 ELSE 0 END
) AS CompatibleUser
Нижеследующее возвращает правильные значения , т.е.1
при наличии двух равных значений по сравнению.
(CASE
WHEN
SUM(V.IsCompatible) OVER
(PARTITION BY ComputerName, UserID) = ApplicationCount
THEN 1 ELSE 0 END
) AS CompatibleUser
или даже проще:
(SELECT CASE
WHEN
X = Y
THEN 1 ELSE 0 END
) AS Result
X = 22 И Y = 22 => Результат = 0
(CASE
WHEN
X = Y
THEN 1 ELSE 0 END
) AS Result
X = 22 И Y = 22 => Результат = 1
Я понимаю , применяя правильный синтаксис важен, и мне известен синтаксис SELECT CASE в T-SQL, но я не понимаю, как первый пример кода оценивается и дает неожиданный результат.
обновление: полный запрос в его контексте
select userapplication.username,
computerdetails.computername,
sum(userapplication.iscompatible)
over (partition by computerdetails.computername,
userapplication.userid) as compatiblecount,
userapplication.applicationcount,
( case
when sum(userapplication.iscompatible)
over (partition by
computerdetails.computername,
userapplication.userid) <> userapplication.applicationcount
then 0
else 1
end
) as usercomputeriscompatible
from computerdetails
right outer join usercomputer
on computerdetails.computerid = usercomputer.computerid
right outer join userapplication
on usercomputer.gebruikerid = userapplication.userid
, поэтому userComputerIsCompatible
является результатом здесь