Обновление с внутренним объединением не работает в db2 - PullRequest
0 голосов
/ 23 января 2019

У меня есть структура, похожая на рабочий запрос в MySQL, который является обновлением, основанным на внутреннем соединении с числом

update schema.daily_totals ct
  inner JOIN (
    SELECT
        COUNT (*) AS contacted,
        SUM( CASE WHEN f.follow_up_date BETWEEN CURRENT_DATE AND CURRENT_DATE + 7 DAYS THEN 1 ELSE 0 END ) AS potentials,
        CAST (ROUND((SUM( CASE WHEN f.follow_up_date BETWEEN CURRENT_DATE AND CURRENT_DATE + 7 DAYS THEN 1.0 ELSE 0 END )/ COUNT (*)) * 100.00, 2) AS DECIMAL (12, 2)) AS PERCENT,
        u.user_id as userID,

    FROM schema.users u
      INNER JOIN schema.notated n
        ON n.user_identifier = u.user_id
      INNER JOIN schema.comms m
        ON n.comms_ID = m.comms_ID
      LEFT JOIN schema.FDates f
        ON f.dNumber = n.dNumber
    WHERE code <> 'none'
    AND n.created_at >= CURRENT_DATE - 1 DAYS
    GROUP BY u.user_id, u.first_name, u.last_name
  ) as cu

  on cu.userID = ct.ext_id
  set ct.contacted_contacted = cu.contacted,
  ct.percent_up_to_date = cu.percent
  where ct.date_of_report >= current_date;

Но он не запустится, похоже, он сломается вокруг последнего «вкл», где я присоединяюсь к подзапросу.

Не могу ли я вообще запустить это в db2?

1 Ответ

0 голосов
/ 23 января 2019

Вместо этого используйте оператор MERGE .

MERGE INTO schema.daily_totals ct
  USING (
    SELECT
        COUNT (*) AS contacted,
        SUM( CASE WHEN f.follow_up_date BETWEEN CURRENT_DATE AND CURRENT_DATE + 7 DAYS THEN 1 ELSE 0 END ) AS potentials,
        CAST (ROUND((SUM( CASE WHEN f.follow_up_date BETWEEN CURRENT_DATE AND CURRENT_DATE + 7 DAYS THEN 1.0 ELSE 0 END )/ COUNT (*)) * 100.00, 2) AS DECIMAL (12, 2)) AS PERCENT,
        u.user_id as userID,

    FROM schema.users u
      INNER JOIN schema.notated n
        ON n.user_identifier = u.user_id
      INNER JOIN schema.comms m
        ON n.comms_ID = m.comms_ID
      LEFT JOIN schema.FDates f
        ON f.dNumber = n.dNumber
    WHERE code <> 'none'
    AND n.created_at >= CURRENT_DATE - 1 DAYS
    GROUP BY u.user_id, u.first_name, u.last_name
  ) as cu

  on cu.userID = ct.ext_id and ct.date_of_report >= current_date
  WHEN MATCHED THEN UPDATE
  set contacted_contacted = cu.contacted, percent_up_to_date = cu.percent;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...