【问题标题】:Use the result of a CASE statement in PL SQL in a concatenation operation在串联操作中使用 PL SQL 中的 CASE 语句的结果
【发布时间】:2018-05-04 03:41:00
【问题描述】:

好的,可能是一个非常简单的答案,但我无法弄清楚我在这里做错了什么,而且我在其他地方也没有找到很好的插图。 :) 显然不是 SQL 专家,但正在研究它。我正在尝试将 CASE 语句的结果用作串联中的变量,但它不起作用。比如:

Select
   Thing1,
   Thing2,
   Case 
      When a.business_seg = 'A' then '25'
      ...
      Else ' '
   End as BusinessSegment,
   Thing2 || BusinessSegment as Thing3
FROM A_Table;

我知道连接适用于 SELECT 语句中的其他字段,只是不使用 CASE 语句的结果。

如果我这样做:

Thing2 || Thing1 as Thing3

按预期工作。

这是某种绑定问题,我需要先将结果保存到表格或类似的东西???

提前致谢!

【问题讨论】:

  • 请编辑问题,说明什么不工作,并显示示例表数据。

标签: oracle select plsql case


【解决方案1】:

在投影中你需要使用表达式。您不能使用别名作为值持有者。

这里有一个解决方案:

Select
   Thing1,
   Thing2,
   Case 
      When a.business_seg = 'A' then '25'
      ...
      Else ' '
   End as BusinessSegment,
   Thing2 || Case 
      When a.business_seg = 'A' then '25'
      ...
      Else ' '
   End as Thing3
FROM A_Table;

或通过子查询

select Thing1, Thing2, Thing2 || BusinessSegment as Thing3 from 
(Select
   Thing1,
   Thing2,
   Case 
      When a.business_seg = 'A' then '25'
      ...
      Else ' '
   End as BusinessSegment
FROM A_Table);

【讨论】:

    【解决方案2】:

    首先在子查询中创建 BusinessSegment,然后您就可以将它与 Thing2 连接起来。问题是您正在连接一个尚未定义的变量。

    或者,如果您愿意,也可以直接连接,即。东西2 || (情况下......)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多