2017-02-01 7 views
0

Я пытаюсь написать запрос в Teradata, но я не уверен, как это сделать; моя таблица выглядит следующим образом:PL SQL SELECT Case Statements с совокупными значениями

col1: текст (ACCOUNT_NUMBER) col2: текст (номер вторичного счета) col3: текст (Primary_cust)

требования бизнеса являются:. «Групповые записи по номеру счета Если для учетной записи есть только одна запись, сохраните эту запись. Если для номера учетной записи есть несколько записей, то: (1), если только одна запись имеет Primary_CUST = 'Y', а затем сохранить. (2) если несколько записей имеют Primary_CUST = 'Y', а затем сохраняйте один с самым низким SCDRY_ACCT_NBR (3) Если записей нет Primary_CUST = 'Y', тогда держите один с самым низким SCDRY_ACCT_NBR.

Я знаю, что мне нужен оператор CASE, и я могу написать первое требование, но не уверен на втором. Любая помощь будет принята с благодарностью.

ответ

0

Вы просто должны думать о том, как сделать заказ строки, чтобы получить строку, которую вы хотите на вершине, кажется, как это:

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 

Конечно QUALIFY является собственностью синтаксис Teradata, если вам нужно сделать это на Oracle, вы должны обернуть его в производную таблицу:

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

 Смежные вопросы

  • Нет связанных вопросов^_^