2015-10-08 62 views
-1

我想将结尾的结果作为案例与查询中的另一个数据点进行比较。我使用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'

+0

你忘记了这个问题吗? –

+1

编辑您的问题并提供样品数据和预期结果。 –

+0

你的意思是在引号中加入了“NEW_CITY” - 我假设你的意思是指第一个case表达式的列别名,而不是字面值?并且您所展示的内容中没有任何PL/SQL。 –

回答

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别名,而第二种方法可能是好的。 (但为了让稍后有人能够更容易理解,更好地格式化它)。

+0

哇,你真棒。谢谢 – user3139937

相关问题