2017-12-01 13 views
0

私はこのSQLクエリを使用して一種の助けが必要です。私はこのように現在構造化されているサブクエリの6つのレイヤーを持つクエリを持っています。ときT2.BB> 100 Bし、「ときE>​​ 200ケースを」(例えば、私は(ケース」で置き換えることができヒントSQLクエリ

  1. 同じ文を繰り返すことなくレイヤーを削減:私はどのようにアドバイスするために楽しみにしています+ C他のB + D端)> 200' 、ひいてはレイヤ2を排除し、レイヤ1で文を書く。私の生のクエリで、私はそのサブに別の計算列に基づいて計算列を持っているので、私はこれを行うことはできませんクエリはサブサブクエリの別の計算列に基づいて計算されるので、5/6時間の繰り返しは私を混乱させ、私を狂わせるでしょう...

  2. 選択2を避けてください。、 1を選択してください。 gの全ての列の最終出力(F、E、A、B、C、D、T2.BB)。私の生のクエリで選択5があるので、私はこれをしたい* - 。これは、サーバがはるかに冗長な仕事をするために発生し、クエリの実行を遅くように私は感じます。

ありがとうございました!

Select 
    2.*, 
    case when E > 200 then 'OK' else 'OH NO' end F 
From 
    (Select 
     1.*, 
     Case when T2.BB >100 then B+C else B+D end E 
    From 
     (Select 
       A, B, C, D, T2.BB 
      From 
       T1 
      Join 
       T2 on T1.A = T2.AA) 1 
    ) 2 
+0

一箇所にそのロジックをカプセル化する私たちは、あなたがこのサーバは多くの冗長化を行うために原因のように私は感じる」 – gjvdkamp

+0

を使用しているもののデータベースを知っている必要があります、いずれかの次のステートメントからの文との事前を参照することができる2つの異なる場所あなたが分析を行う場合にのみ、あなたは確信することができますengienフード – jean

+0

こんにちは@gjvdkampの下でそれをoptmizeすることができますので、クエリプランをSE。 Amazon Redshiftです。 – orzking

答えて

0

それは次のようになりますので、書類としてみてください、彼らはあなたがロジックを適用する順序を維持するのに役立つので、彼らはきれいに見える:あなたが何かを再利用する必要がある場合も

WITH 
t1 as (
    select ... 
    from src_table 
) 
,t2 as (
    select *, ... 
    from t1 
) 
<<as much layers as needed>> 

あなたはすなわち

+0

こんにちはアレックス。あなたのヒントをありがとう。あなたのアプローチとSQL実行パフォーマンスを改善しました。 – orzking

+0

@orzking great!答えを受け入れてください – AlexYes