我有一个SQL问题。我想使用案例逻辑根据在where子句中完成的比较结果来确定ad hoc列的值。简化,我想做这样的事情:
select t.id,
(case
when cond1 then "lbl1" + t2.v1
when cond2 then "lbl2" + t2.v1)
from
tbl1 as t left join tbl2 as t2
where
( cond1 || cond2 )
问题是我不想在select子句中重新计算cond1和cond2,因为它们很贵。
我怎样才能得到这个结果?
谢谢, frood
答案 0 :(得分:0)
这是用MS SQL 2008编写的,不确定它是否可以在其他RDBMS中使用相同的代码,但希望它可以让您了解可能有用的内容。它必须针对每条记录进行迭代,但总体而言必须为每条记录运行一次而不是两次。
declare @cond1 as bit
declare @cond2 as bit
if 1=1 -- substitute with condition 1
set @cond1 = 1
ELSE
set @cond1 = 0
if 1=0 -- substitute with conditon 2
set @cond2 = 1
ELSE
set @cond2 = 0
SELECT
CASE WHEN @Cond1 = 1 THEN 'Condition 1 met'
WHEN @Cond2 = 1 THEN 'Condition 2 met'
END
WHERE @cond1 = 1 OR @cond2 = 1