【发布时间】:2013-11-23 23:56:16
【问题描述】:
我知道这个问题有多种变体,但找不到可以回答我正在寻找的问题。
我从另一个不再参与其中的程序员那里继承了一个数据库和报告。
其中一个查询使用此代码:
Select
b.HospitalMasterID
,b.TxnSite
,b.PatientID
,b.TxnDate as KeptDate
From
Billing as b
Inner Join Patient as p
on b.HospitalMasterID = p.HospitalMasterID
and b.PatientID = p.PatientID
Where
b._IsServOrItem=1
and b.TxnDate >= '20131001'
and (Case
When b.ExtendedAmount > 0 Then 1
When (Not(p.PlanCode is null)) and (b.listAmount >0) then 1
End = 1)
当我运行查询时,我得到了大约 900,000 行返回。如果我删除 Case 语句,我会返回超过一百万行。
有人可以解释为什么会这样吗?案例陈述究竟在做什么?有没有更好的方法来完成同样的事情。我真的不喜欢这种说法,而且由于缺乏结构,整个报告查询很难阅读。
Sql 的版本是 T-Sql 2012。
谢谢,
【问题讨论】:
-
它可能是早期代码留下的具有更多
WHEN子句的工件,或者有人可能预计稍后会添加更多,这似乎是个好主意。它甚至避免使用p.PlanCode is not NULL。叹息。
标签: sql-server case where