Using Case When with ON 子句 SQL - Netezza

Using Case When with ON clause SQL - Netezza

请给我以下代码

SELECT DISTINCT 
CASE WHEN LENGTH (i.MOBILE_NUMBER) = 10 THEN 0||i.MOBILE_NUMBER ELSE i.MOBILE_NUMBER END AS New_Mob_Num,
COUNT(i.SUBS_ID) AS Subs_Count,
COUNT(s.MESSAGEID) AS SMS_COUNT,
              SUM(CASE WHEN s.MESSAGESTATE = 'Undeliverable' THEN COUNT ELSE 0 END) AS Undeliverablecount,
              SUM(CASE WHEN s.MESSAGESTATE = 'Delivered' THEN COUNT ELSE 0 END) AS Deliveredcount
    FROM PRD_STG.MOB.INF_SUBSCRIBER i
    INNER JOIN ANALYTICS.sms.mq s 
ON i.New_Mob_Num = strright(s.destination, 11)
GROUP BY 1

我得到一个错误 ERROR: Attribute 'I.NEW_MOB_NUM' not found

谁可以使用列 CASE WHEN LENGTH (i.MOBILE_NUMBER) = 10 THEN 0||i.MOBILE_NUMBER ELSE i.MOBILE_NUMBER END AS New_Mob_Num 带有 ON 子句,而 Joining

当像下面这样使用带有 ON 子句的 CASE WHEN 语句时,我得到了错误的结果

SELECT DISTINCT 
CASE WHEN LENGTH (i.MOBILE_NUMBER) = 10 THEN 0||i.MOBILE_NUMBER ELSE i.MOBILE_NUMBER END AS New_Mob_Num,
COUNT(i.SUBS_ID) AS Subs_Count,
COUNT(s.MESSAGEID) AS SMS_COUNT,
              SUM(CASE WHEN s.MESSAGESTATE = 'Undeliverable' THEN COUNT ELSE 0 END) AS Undeliverablecount,
              SUM(CASE WHEN s.MESSAGESTATE = 'Delivered' THEN COUNT ELSE 0 END) AS Deliveredcount
    FROM PRD_STG.MOB.INF_SUBSCRIBER i
    INNER JOIN ANALYTICS.sms.mq s 
ON (CASE WHEN LENGTH (i.MOBILE_NUMBER) = 10 THEN 0||i.MOBILE_NUMBER ELSE i.MOBILE_NUMBER END) 
= strright(s.destination, 11)
GROUP BY 1

这就是我的意思:

SELECT i.New_Mob_Num ,
       COUNT(i.SUBS_ID) AS Subs_Count,
       COUNT(s.MESSAGEID) AS SMS_COUNT,
       SUM(CASE WHEN s.MESSAGESTATE = 'Undeliverable' THEN COUNT ELSE 0 END) AS Undeliverablecount,
       SUM(CASE WHEN s.MESSAGESTATE = 'Delivered' THEN COUNT ELSE 0 END) AS Deliveredcount
FROM (SELECT i.*,
             (CASE WHEN LENGTH (i.MOBILE_NUMBER) = 10 
                   THEN '0'||i.MOBILE_NUMBER
                   ELSE i.MOBILE_NUMBER
              END) AS New_Mob_Num
      FROM PRD_STG.MOB.INF_SUBSCRIBER i
     ) i JOIN
     ANALYTICS.sms.mq s 
     ON i.New_Mob_Num = strright(s.destination, 11)
GROUP BY 1;

这应该可以解决您的语法错误。如果这没有任何用处,请提出一个 new 问题,并提供适当的示例数据和所需的结果。