私はOracleのSQL「テーブル名」が「A」という名前の列が、それ以外のcolumsを持ってOracle SQL文で動的列を再利用する方法は?
SELECT
A*2 AS P,
P+5 AS Q
FROM tablename
のようなもので、動的に計算するいくつかの列を再利用してみてください。これは私に
ORA-00904: "P": invalid identifier
を与える私は
SELECT P, P+5 AS Q
FROM (SELECT A*2 AS P FROM tablename)
のようにサブクエリを使用することによってこの問題を回避する方法を知っているが、私は、これはちょっと醜いだと思います。さらに、クエリをやや複雑にしたいと考えています。 'Q'も再利用しています。私はまだ別のサブクエリを作成したくありません。
更新:私は 'P'の計算を保存する理由は、私はそれをより複雑にし、 'P'を何度も再利用したいということです。だから私は明示的に 'A * 2 + 5 AS Q'と言ってほしくない。なぜなら、 'P'がもっと複雑になるとすぐに扱いにくくなるからだ。
これを行うには、いいアイデアが必要ですか?
アップデート:私はDB管理者じゃないことに注意する必要があります:(
更新:。。現実世界の例では、より具体的なクエリで私は何をしたいことは次のとおりです。 今の
SELECT
SL/SQRT(AB) AS ALPHA,
5*LOG(10,ALPHA) AS B,
2.5*LOG(10,1-EXP(-5/ALPHA)*(5/ALPHA+1)) AS D
BS -2.74 + B + D AS BSA
FROM tablename
、私は働く、それを書かれていますが、醜いですしました:
SELECT
SL/SQRT(AB) AS ALPHA,
5*LOG(10,SL/SQRT(AB)) AS B,
2.5*LOG(10,1-EXP(-5/(SL/SQRT(AB)))*(5/(SL/SQRT(AB))+1)) AS D
BS -2.74 + 5*LOG(10,SL/SQRT(AB)) + 2.5*LOG(10,1-EXP(-5/(SL/SQRT(AB)))*((5/(SL/SQRT(AB)))+1)) AS BSA
FROM tablename
私はデータを受信した後、このすべてを行うことができますが、私は思った、のはどのように見てみましょう多くの場合、私はデータベースに任せることができます。また、「BSA」も選択したいと思います(サブクエリ/ with節としてこのクエリを実行することができます)。
アップデート:OK、私は今、Cade RouxとDave Costaのソリューションで終わったと思います。 Pax 'とJens Schauderのソリューションは良く見えるだろうが、私はDBAではないので使用できない。今私は最良の答えとして誰をマークするか分からない。
WITH
A1 AS (
SELECT A0.*,
SL/SQRT(AB) AS ALPHA
FROM tablename A0
),
A2 AS (
SELECT A1.*,
5*LOG(10,ALPHA) AS B,
2.5*LOG(10,1-EXP(-5/ALPHA)*((5/ALPHA)+1)) AS D
FROM A1
)
SELECT
ALPHA, B, D, BS,
BS -2.74 + B + D AS BSA
FROM A2
ところで、誰でも興味ある場合には、SBは、B及びDは補正項であるため銀河、「の表面の明るさ」です。
笑、それは副作用を引き起こしました!私が最初に新しい列に「T」と「S」を使用していたからです。エラーはなく、値はまったく間違っていました。 (200+列、すべて2〜5文字...) – BlackShift
結果は、列順序の変更で不変であることを意味します。うまくいけば、ANSIはある種のインラインスタッキング命令の形でいくつかの救済策を提供するでしょう。 –