【问题标题】:Using Case When to Classify Customers in Teradata在 Teradata 中使用案例对客户进行分类
【发布时间】:2016-10-28 17:19:15
【问题描述】:

我正在使用 Teradata 中的 SQL 研究客户及其购物习惯。

假设我有以下信息:

Table wklytrans
CustNm  GroceryStore  # WklyTrxns  Sum WklyTrxns  CustType
Jack    Publix        2            $70            Publix
Ruby    Kroger        1            $15            Both
Moe     Kroger        4            $120           Kroger
Ruby    Publix        1            $20            Both

我想创建一个新表,将它们分类如下:

CustNm  CustType  # PubTrxns  Sum PubTrxns  # KroTrxns  Sum KroTrxns
Jack    Publix    2           $70           NULL        NULL
Ruby    Both      1           $20           1           $15
Moe     Kroger    NULL        NULL          4           $120

我目前尝试运行的代码如下:

CREATE MULTISET VOLATILE TABLE custclass AS(
SEL
CustNm,
CustType,
CASE WHEN CustType IN 'Both' AND GroceryStore IN 'Publix' THEN # WklyTrxns
WHEN CustType IN 'Publix' THEN # WklyTrxns
END AS # PubTrxns,
CASE WHEN CustType IN 'Both' AND GroceryStore IN 'Publix' THEN Sum WklyTrxns
WHEN CustType IN 'Publix' THEN Sum WklyTrxns
END AS Sum PubTrxns,
CASE WHEN CustType IN 'Both' AND GroceryStore IN 'Kroger' THEN # WklyTrxns
WHEN CustType IN 'Kroger' THEN # WklyTrxns
END AS # KroTrxns,
CASE WHEN CustType IN 'Both' AND GroceryStore IN 'Kroger' THEN Sum WklyTrxns
WHEN CustType IN 'Kroger' THEN Sum WklyTrxns
END AS Sum KroTrxns
FROM wklytrans
)
WITH DATA                                      
PRIMARY INDEX (CustNm)                          
ON COMMIT PRESERVE ROWS;

这是当前正在输出的内容:

CustNm  CustType  # PubTrxns  Sum PubTrxns  # KroTrxns  Sum KroTrxns
Jack    Publix    2           $70           NULL        NULL
Ruby    Both      1           $20           NULL        NULL
Ruby    Both      NULL        NULL          1           $15
Moe     Kroger    NULL        NULL          4           $120

如何让我的代码将 Ruby 的事务合并到同一行,使其看起来像我想要的输出?

感谢任何帮助!

【问题讨论】:

    标签: sql teradata case-when


    【解决方案1】:

    您可能需要像这样使用 MAX/GROUP BY 组合多行:

    CREATE MULTISET VOLATILE TABLE custclass AS(
    SEL
    
        CustNm,
        CustType,
        MAX(CASE WHEN CustType IN 'Both' AND GroceryStore IN 'Publix' THEN # WklyTrxns
            WHEN CustType IN 'Publix' THEN # WklyTrxns
            END) AS # PubTrxns,
        MAX(CASE WHEN CustType IN 'Both' AND GroceryStore IN 'Publix' THEN Sum WklyTrxns
            WHEN CustType IN 'Publix' THEN Sum WklyTrxns
            END) AS Sum PubTrxns,
        MAX(CASE WHEN CustType IN 'Both' AND GroceryStore IN 'Kroger' THEN # WklyTrxns
            WHEN CustType IN 'Kroger' THEN # WklyTrxns
            END) AS # KroTrxns,
        MAX(CASE WHEN CustType IN 'Both' AND GroceryStore IN 'Kroger' THEN Sum WklyTrxns
            WHEN CustType IN 'Kroger' THEN Sum WklyTrxns
            END) AS Sum KroTrxns
        FROM wklytrans
        GROUP BY 1,2
        )
    WITH DATA                                      
    PRIMARY INDEX (CustNm)                          
    ON COMMIT PRESERVE ROWS;
    

    【讨论】:

      猜你喜欢
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      相关资源
      最近更新 更多