我试图在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声明,我能够写出第一个要求,但不能确定第二个要求。任何帮助将不胜感激。
答案 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