web-dev-qa-db-ja.com

ケースの前にエイリアスを定義したCASEを使用するにはどうすればよいですか?

この例のように、popのようなエイリアスをさらにcaseのように使用するにはどうすればよいですか(Oracleデータベース)。

select  
   (select sum(ccs_pop) from rap4) as pop,
case 
    when pop+x=a+b+c then pop+x
end as sum1,
case 
    when pop+y=d+e+f then pop+y
end as sum2
from rap4

アイデアは、複雑な状況では「ポップ」が必要であり、多くの文では「ポップ」が必要であり、エイリアスまたは何かを使用する必要があるということです...

1
WDrgn

OK、私は提供された例を取り、それを少し修正します:

select  
    (<insanely complex expression>) as pop,
    case 
        when pop is null then 'isnull'
    end
from rap4 ;

SELECTリストで定義されたエイリアスは、同じSELECTリストまたは(同じレベル)WHERE内の別の式では使用できないため、上記はもちろんエラーになります。またはGROUP BY句。

ただし、できることは式を複製することです。

select  
    (<insanely complex expression>) as pop,
    case 
        when <insanely complex expression> is null then 'isnull'
    end
from rap4 ;

または派生テーブルを使用します。

select
    pop,
    case 
        when pop is null then 'isnull'
    end
from 
    ( select  
          (<insanely complex expression>) as pop
      from rap4
    ) t ;

または、共通テーブル式(CTE)を使用します。

with cte as
  ( select  
        (<insanely complex expression>) as pop
    from rap4
 )
select
    pop,
    case 
        when pop is null then 'isnull'
    end
from cte ;
4
ypercubeᵀᴹ