【问题标题】:SQL How to nest multiple Case When Queries and add a conditionSQL如何嵌套多个Case When查询并添加条件
【发布时间】:2022-11-25 23:14:39
【问题描述】:

我试图将 2021 年 (A.TXN_MTH) 购物的客户 (contact_key) 列分为新客户和“回头客”,回头客意味着他们在过去 12 个月内没有购物(X.Fiscal_mth_idnt 列中的 YYYYMM)。

我正在使用 CASE WHEN A.TXN_MTH = MIN(X.FISCAL_MTH_IDNT) THEN 'NEW' 这是正确的。下一个情况应该是 X.TXN_MTH 之前的最大月份是 12 个月或更早之前。我在 Where 语句中添加了 12 个月的部分。我应该嵌套 3 个 CASE WHEN'S 而不是 WHERE 吗?

SELECT 
                    T.CONTACT_KEY
                ,   A.TXN_MTH
                ,   CASE    WHEN A.TXN_MTH = MIN(X.FISCAL_MTH_IDNT) THEN 'NEW'
                            WHEN (MAX(CASE WHEN X.FISCAL_MTH_IDNT < A.TXN_MTH THEN X.FISCAL_MTH_IDNT ELSE NULL END)) THEN 'RETURNING'
                            END AS CUST_TYPE                                
            FROM B_TRANSACTION T
            INNER JOIN B_TIME X
                ON T.TRANSACTION_DT_KEY = X.DATE_KEY
            INNER JOIN A
                ON A.CONTACT_KEY = T.CONTACT_KEY AND A.BU_KEY = T.BU_KEY 
            WHERE (MAX(CASE WHEN X.FISCAL_MTH_IDNT < A.TXN_MTH THEN X.FISCAL_MTH_IDNT ELSE NULL END)) < A.TXN_MTH - (date_format(add_months(concat_ws('-',substr(yearmonth,1,4),substr(yearmonth,5,2),'01'),-12),'yyyyMM')
            GROUP BY
                    T.CONTACT_KEY
                ,   TXN_MTH;

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    将你的 where 声明移动到你的案例

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 1970-01-01
      • 2017-05-30
      • 2017-08-15
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      相关资源
      最近更新 更多