【问题标题】:sql query to get the column value again in case statementsql查询在case语句中再次获取列值
【发布时间】:2015-10-15 12:29:26
【问题描述】:
select *, 
case when number = '12' and status = 'y' then cost
end as [price]
from tblx

我从上面的查询中得到了结果,我想使用 price 列的值,同样的查询语句如下所示

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 语句中使用它,因为查询更大,我缩短了问题。

谢谢

【问题讨论】:

  • 样本数据和期望的结果将有助于解释您要做什么。
  • 如果不能,那为什么不把整个第一个子句放在第二种情况下呢?
  • 我想获取价格列值以在相同查询的情况下进行验证。
  • 您不能引用在同一范围内创建的别名。考虑使用 CTE 或子查询,例如SELECT *, CASE WHEN price = 24 THEN trasdate END as trasdate FROM (SELECT *, case when number = '12' ... AS price FROM tblx) AS x;
  • 案例表达,不是案例陈述...

标签: sql sql-server-2005-express


【解决方案1】:

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

如果您不想重复 case 语句,还有其他选择,例如:

  • 在子查询中使用价格语句并在外部查询中按名称引用它
  • 使用将价格添加为计算列的临时表
  • 同上,但使用表变量

只是重复该语句显然是最简单的,也可能表现最好,缺点是重复。在性能方面,针对您可能的用例进行测试。

【讨论】:

  • 你的回答让我有了执行的想法,除了case表达,谢谢你的努力
  • 没问题,如果您对我的回答满意,请随意打勾! ;)
【解决方案2】:
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

【讨论】:

  • 这可行,但是是多余的,并且当要重复的表达式变得更复杂时会变得更糟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多