在串联操作中使用PL SQL中的CASE语句的结果

时间:2017-11-20 20:06:43

标签: oracle select plsql case

好的,这可能是一个非常简单的答案,但我无法弄清楚我在这里做错了什么,而我在其他地方找不到好的例子。 :)显然不是一个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

按预期工作。

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

提前致谢!

2 个答案:

答案 0 :(得分:2)

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

这是一个解决方案:

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);

答案 1 :(得分:1)

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

或者如果您愿意,您可以直接连接,即。 Thing2 || (情况......)