sql查询在case语句中再次获取列值

时间:2015-10-15 12:29:26

标签: sql sql-server-2005-express

select *, 
case when number = '12' and status = 'y' then cost
end as [price]
from tblx

我从上面的查询中得到了结果,我想使用price列的值,再次在同一个查询的case语句中如下所示

select *, 
case when number = '12' and status = 'y' then cost-500
end as [price],
case when price = 24 then trasdate end as [trasdate]
from tblx

如果我的问题不明确,请建议我

我正在使用连接8个表的两个以上连接的存储过程,我只想再次获取列值以在同一查询的case语句中使用它,我缩短了问题,因为查询更大。< / p>

由于

2 个答案:

答案 0 :(得分:1)

在同一个查询中,您只需复制尝试引用它的同一个case语句。顺便说一下,你应该给它添加一个else 0,因为如果你的条件没有评估为true,它会返回null,这可能会影响它在其他case语句中的用法。

如果您不想复制案例陈述,还有其他选择,例如:

  • 在子查询中使用price语句,并在外部查询中按名称引用它
  • 使用临时表,其中添加了价格作为计算列
  • 如上所述,但使用表变量

重复这个陈述显然是最简单的,也可能表现得最好,缺点是重复。在性能方面,测试您的可能用例。

答案 1 :(得分:0)

select *, 
   case when number = '12' and status = 'y' then cost end price,
   case when number = '12' and status = 'y' 
         and cost = 24 then trasdate end [trasdate]
from tblx