【发布时间】:2011-11-04 18:12:38
【问题描述】:
我不太明白为什么这两个不同的代码示例返回不同的值。
某种不正确但有效的语法,返回错误的结果,例如,当比较两个相等的值时返回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 AND Y = 22 => 结果 = 0
(CASE
WHEN
X = Y
THEN 1 ELSE 0 END
) AS Result
X = 22 AND Y = 22 => 结果 = 1
我了解应用正确的语法很重要,并且我知道 T-SQL 中的 SELECT CASE 语法,但我不明白如何评估 第一个代码示例 strong> 并提供了意想不到的结果。
更新:上下文中的完整查询
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 是这里有问题的结果
【问题讨论】:
-
您可能需要显示更多查询。这些样本是否用于
SELECT子句、WHERE子句、HAVING子句或其他地方? -
我添加了查询(命名略有修改),但它代表了它的工作方式
标签: sql-server sql-server-2008 tsql