将案例结果与另一个数据点进行比较

时间:2015-10-08 16:49:31

标签: sql oracle

我想将结尾的结果与查询中的另一个数据点进行比较。我正在使用PL / sql

CASE WHEN zz.code <> '0' THEN 'NYC'
     WHEN zz.last IS NOT NULL THEN 'PARIS'
     ELSE 'LA'
END AS NEW_CITY,

----这就是我在其下面尝试的,当然它不起作用

CASE When me.current_City = 'NEW_CITY' then 'Same'
     Else 'Different'
end as Comparison

我希望比较列显示

'Same''Different'

1 个答案:

答案 0 :(得分:1)

除了order by子句(see the docs)之外,您无法在同一级别的查询中引用列别名。

您可以使用内联视图并引用外部查询中的内部查询别名:

SELECT ..., CASE When current_City = NEW_CITY then 'Same'
  Else 'Different' end as Comparison
FROM (
  SELECT ..., me.current_City, CASE WHEN zz.code <> '0' THEN 'NYC'
     WHEN zz.last IS NOT NULL THEN 'PARIS'
     ELSE 'LA' END AS NEW_CITY,
     ...
)

或重复案例表达:

CASE When me.current_City =
    CASE WHEN zz.code <> '0' THEN 'NYC'
      WHEN zz.last IS NOT NULL THEN 'PARIS'
      ELSE 'LA' END
  then 'Same'
  Else 'Different'
  end as Comparison

根据您引用它的次数以及案例表达的时间长短,内联视图方法可能更简洁,更易于维护(因为您不必记住修改相同的多个副本)表达)。但是,如果您想要显示'same''different',那么您根本不需要单独的new_city别名,第二种方法是可能没关系。 (但要格式化它,以便后来有人更容易理解)。