Oracle:在同一Select语句中使用伪列值
我在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个这样的列,它们依赖于前面的列输出,重复将是维护的噩梦 编辑:我包括了表名
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查询将作为一个视图执行——可能存在性能问题(当然,这有时是一个优势)。