【发布时间】:2011-04-26 12:57:01
【问题描述】:
我有类似的东西
(COMPLEX_EXPRESSION_N 代表长子查询)
select
ID_Operation,
FirstCheck = CASE WHEN (COMPLEX_EXPRESSION_1)= 0 then 0 else 1 end,
SecondCheck = CASE WHEN (COMPLEX_EXPRESSION_2)= 0 then 0 else 1 end,
ThirdCheck = CASE WHEN (COMPLEX_EXPRESSION_3)= 0 then 0 else 1 end,
AllChecksOk = Case WHEN
(FirstCheck + SecondCheck + Third CHeck = 3)
Then 'OK' Else 'No' End
from
AllOperationsTable
是否可以像我在 AllChecksOk 行中那样使用 FirstCheck、SecondCheck、ThirdCheck?
我不关心性能,这是每天在极少数记录上手动运行一次的东西,我只是想避免创建视图、表或临时表并将所有内容保存在单个 select 语句中。
作为一种替代方法,我可以这样做,但它会降低查询的可读性(因为我需要为每个复杂的表达式编写两次):
select
ID_Operation,
FirstCheck = CASE WHEN (COMPLEX_EXPRESSION_1)= 0 then 0 else 1 end,
SecondCheck = CASE WHEN (COMPLEX_EXPRESSION_2)= 0 then 0 else 1 end,
ThirdCheck = CASE WHEN (COMPLEX_EXPRESSION_3)= 0 then 0 else 1 end,
AllChecksOk = Case WHEN
(COMPLEX_EXPRESSION_1+ COMPLEX_EXPRESSION_2+
COMPLEX_EXPRESSION_3CHeck = 3) Then 'OK' Else 'No' End
from
AllOperationsTable
【问题讨论】:
标签: sql-server sql-server-2008 case conditional-statements