Пример использования Когда с предложением ON SQL - Netezza - PullRequest
1 голос
/ 02 мая 2020

пожалуйста, у меня есть следующий код

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

, кому я могу использовать столбец СЛУЧАЙ, КОГДА ДЛИНА (i.MOBILE_NUMBER) = 10 THEN 0 || i.MOBILE_NUMBER ELSE i.MOBILE_NUMBER END AS New_Mob_Num с предложением ON при присоединении .

и при использовании оператора CASE WHEN с предложением ON, как показано ниже, я получил неправильные результаты

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

1 Ответ

1 голос
/ 03 мая 2020

Вот что я имею в виду:

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;

Это должно исправить вашу синтаксическую ошибку. Если это не поможет, задайте новый вопрос с соответствующими данными выборки и желаемыми результатами.

...