根据 sql (teradata) 中另一列的条件分配列值

Assigning column value based on condition on another column in sql (teradata)

我有一个 table,其中包含以下列:DateAcctIdCustIDBackupIDLoginsAmount。对于给定的日期,AcctID 可以多于一个 CustIDs,但我想根据 Logins 的值将单数 CustID 分配给 AcctID .


:

如果 Cust1 对于给定日期和 AcctIDLogins 多于 Cust2,则 CustID 应该具有 Cust1 作为值。

如果 Cust1 登录 = Cust2 登录那么 CustID 应该有 BackupID 值。


然后我想为给定的 DateAcctID 添加 Amount

任何人都可以帮助逻辑吗?我试过自助加入,但可能没有想到正确的方式。

您可以使用聚合和 window 函数实施您的规则:

select acctid, date,
       (case when count(*) = 1 then min(custid)
             else min(backupid)
        end) as imputed_customer
from (select acctid, date, min(backupid) as backupid, custid,
             count(*) as cnt,
             rank() over (partition by acctid, date order by count(*) desc) as seqnum
      from t
      group by acctid, date
     ) ad
where seqnum = 1
group by acctid, date;

子查询按 acctiddatecustid 聚合数据。它还对给定 acct/date 组合的监护人进行排名。

外部查询然后说:

  • 如果只有一个最大值custid,则使用那个。
  • 否则使用backupid.

请注意,如果给定的 acctid/date 组合有多个 backupid,则使用任意一个。