操作

2017-01-03 8 views
0

、私の質問は:操作

select shape as "Shape", 
     codigo as "GeocodigoTo", 
     function(shape) as "X", 
     function(shape) as "Y", 
     **[X - Y] as "X - Y"**, 
... 

私は唯一のSELECT文で存在する2つの列を操作するにはどうすればよいですか?

Ps:私はこれをしたくありません:function(x) - function(y)。

WITH raw_data as 
(shape as "Shape", 
codigo as "GeocodigoTo", 
function(shape) as "X", 
function(shape) as "Y" FROM table) 
SELECT d.*,X-Y as "X-Y" FROM raw_data; 

二回の関数を呼び出す避けるということ:それはあなたの場合には、サブクエリを使用することができオラクルでは遅い

+0

あなたはサブクエリーの仲間ですか? – Anand

+0

あなたは2つの選択肢しかありません(Oracleでは、正しく理解すれば、あなたが望むことができる他のDB製品があります)。 1つは 'function(x)-function(y)'を繰り返すことです。オラクルは 'function(x)'と 'function(y) 'を2回計算しないほど賢明であることを願っています。あなたはそれが欲しくないと言った。もう1つのオプションは、サブクエリで 'X'と' Y'を選択し、次に 'X-Y' inと外部クエリを選択することです。 – mathguy

+0

"*私はこれをしたくありません:function(x) - function(y)。それは遅くなります*" - これは関数に依存します。その関数が '確定的(deterministic) 'とマークされている場合、Oracleは、それを書き留める回数に関係なく、各行に対して一度だけコールします。 –

答えて

0

だろう。

+1

これは、サブクエリ –

+0

ではなく、「共通テーブル式」と呼ばれますが、SQL Serverにはありますが、oracle docsがこのサブクエリを呼び出します。 – mjpolak

+0

これはSQL標準で使用される用語です。 –