【发布时间】:2015-06-25 15:42:14
【问题描述】:
下面两个代码有什么不同吗,我的输出有很大的不同。
1)
SUM(
CASE
WHEN lientype.id NOT IN (-1, -3) THEN
((a.floatingspread + dbo.maxfloat(a.floatingspreadfloor, al.liborrate)) * pos.marketvalue)
ELSE 0
END)/NULLIF(sum(
CASE
WHEN lientype.id NOT IN (-1,
-3) THEN
(pos.marketvalue)
ELSE 0
END),0) averagecoupon
2)
SUM(
CASE
WHEN (
lientype.id<>-1
OR
lientype.id<>-3
)
THEN
((a.floatingspread + dbo.maxfloat(a.floatingspreadfloor, al.liborrate)) * pos.marketvalue)
ELSE 0
END)/NULLIF(sum(
CASE
WHEN (
lientype.id<>-1
OR
lientype.id<>-3
)
THEN
(pos.marketvalue)
ELSE 0
END),0) averagecoupon
【问题讨论】:
-
你应该用“and”而不是“or”, -1 或 -3 总是正确的
-
您的问题的简单答案是“是”。不好的答案?不好的问题。
-
如果输出存在巨大差异,那么是的,您可以推断出存在差异。
-
列中间的那个标量函数很吓人。众所周知,标量函数不利于性能,并且当卡在这样的列中时,它们可能会造成严重后果。
标签: sql sql-server sql-server-2008 sql-server-2008-r2