PL SQL SELECT包含聚合值的案例语句

时间:2017-02-01 19:48:46

标签: plsql teradata

我试图在Teradata写一个查询,但我不知道该怎么做;我的表看起来像这样:

col1:text(account_number) col2:文本(辅助帐号) col3:text(Primary_cust)

业务要求是: "按帐号分组记录。 如果帐户只有一条记录,则保留该记录。 如果帐号有多个记录,则: (1)如果只有一条记录有Primary_CUST =' Y'然后继续 (2)如果多个记录有Primary_CUST =' Y'然后保持一个最低SCDRY_ACCT_NBR (3)如果没有记录有Primary_CUST =' Y'然后保留一个最低的SCDRY_ACCT_NBR。

我知道我需要一个CASE声明,我能够写出第一个要求,但不能确定第二个要求。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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