Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle:在同一Select语句中使用伪列值_Oracle_Select - Fatal编程技术网

Oracle:在同一Select语句中使用伪列值

Oracle:在同一Select语句中使用伪列值,oracle,select,Oracle,Select,我在oracle中有一个场景,需要能够重用以前在同一select语句中计算的伪列的值,例如: select 'output1' process, process || '-Output2' from Table1 出于维护目的,我不想在第二列中再次重复第一列逻辑,目前它是按照 select 'output1' process, 'output1' || '-Output2' name from Table1 因为我有4个这样的列,它们依赖于前面的列输出,重复将是维护的噩梦 编辑:我包括了表名

我在oracle中有一个场景,需要能够重用以前在同一select语句中计算的伪列的值,例如:

select 'output1' process, process || '-Output2' from Table1
出于维护目的,我不想在第二列中再次重复第一列逻辑,目前它是按照

select 'output1' process, 'output1' || '-Output2' name from Table1
因为我有4个这样的列,它们依赖于前面的列输出,重复将是维护的噩梦


编辑:我包括了表名并删除了dual,因此没有假设这不是一个复杂的过程,我的实际语句在不同的表上有2到3个联接

您可以在子查询中计算值:

select calculated_output process, calculated_output || '-Output2' name from
(
    select 'output1' calculated_output from dual
)

您还可以使用子查询分解语法-我认为它更易于阅读:

with tmp as
(  
  select 'output' process from dual
)
select 
  process, process || '-Output2' from tmp;

与之前的海报非常相似,但我更喜欢下面展示的方法,在我看来,它更具可读性,因此更受支持

select val1 || val2 || val3 as val4, val1 from (
   select 'output1' as val1, '-output2' as val2, '-output3' as val3 from dual
)

不幸的是,不能在同一范围内重复使用计算列。这似乎有点过分,但Adam Paynter建议的分解子查询或内联视图将强制计算在不同级别上进行,这意味着您可以重复使用结果。我倾向于忘记,
WITH
语法实际上存在。:)唯一可能的缺点是(取决于Oracle版本),WITH查询将作为一个视图执行——可能存在性能问题(当然,这有时是一个优势)。