SQL - 捕获比较为ad hoc列的结果

时间:2015-07-23 13:09:38

标签: sql

我有一个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

1 个答案:

答案 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