PL SQL SELECT 涉及合计值的案例陈述

PL SQL SELECT Case Statements involving aggregate values

我正在尝试在 Teradata 中编写一个查询,但我不确定该怎么做;我的 table 看起来像这样:

col1: 文本 (account_number) col2:text(二级账号) col3: 文本 (Primary_cust)

业务需求是: "按帐号对记录进行分组。 如果一个帐户只有一个记录,则保留该记录。 如果一个帐号有多个记录,则: (1) 如果只有一条记录有Primary_CUST = 'Y'则保留。 (2) 如果多个记录有 Primary_CUST = 'Y' 则保留一个最低的 SCDRY_ACCT_NBR (3) 如果没有记录 Primary_CUST = 'Y' 则保留最低 SCDRY_ACCT_NBR.

我知道我需要一个 CASE 语句并且我能够编写第一个要求,但不确定第二个。任何帮助将不胜感激。

你只需要考虑如何对行进行排序以获得你想要的行,似乎是这样的:

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 上执行此操作,则必须将其包装在 Derived Table:

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