2017-02-01 4 views
0

Teradataでクエリを作成しようとしていますが、その方法はわかりません。PL SQL SELECTケース集計値を含むステートメント

COL1:テキスト(ACCOUNT_NUMBER) COL2:テキスト(二次口座番号) COL3:テキスト(Primary_cust)

ビジネス要件は次のとおりです。私のテーブルは次のようになります。口座番号によって 「グループレコード アカウント番号に複数のレコードがある場合は、(1)1つのレコードにPrimary_CUST = 'Y'が指定されている場合は、そのまま保持する (2)複数のレコードがある場合(3)Primary_CUST = 'Y'のレコードがない場合は、Primary_CUST = 'Y'であり、次に最も低いSCDRY_ACCT_NBRを持つレコードを保持します。 最低のSCDRY_ACCT_NBRで1を保つ。

私はCASE文が必要であることを知っています。最初の要件を書くことができますが、2番目の要件はわかりません。どんな助けでも大歓迎です。

答えて

0

あなたはちょうどあなたが一番上にしたい行を取得するには、行の注文方法について考える必要が、このようなことのようです。もちろんQUALIFY

SELECT * FROM tab 
QUALIFY 
    Row_Number() 
    Over (PARTITION BY account_number -- for each account 
     ORDER BY Primary_CUST DESC -- 'Y' before 'N' (assuming it's a Y/N column) 
       ,SCDRY_ACCT_NBR  -- lowest number 
     ) = 1       -- return the top row 

あなたがする必要がある場合は、独自のTeradataの構文ですこれをオラクルで派生テーブルにラップする必要があります。

SELECT * 
FROM 
(
    SELECT t.*, 
     Row_Number() 
     Over (PARTITION BY account_number -- for each account 
      ORDER BY Primary_CUST DESC -- 'Y' before 'N' (assuming it's a Y/N column) 
        ,SCDRY_ACCT_NBR) AS rn-- lowest number 
    FROM tab 
) AS dt 
WHERE rn = 1        -- return the top row 
+0

恐ろしいです!私はパーティショニングについても考えなかった - ありがとう! – CTolbert

関連する問題