Как выполнить множественное объединение с помощью запроса? - PullRequest
0 голосов
/ 07 июня 2019

Я хочу выполнить дополнительное внутреннее соединение в запросе ниже, но у меня возникают синтаксические ошибки после создания временной таблицы и внутреннего соединения.

WITH myPos
AS (
    SELECT row_number() OVER (
            PARTITION BY pr_emp_id ORDER BY db_last_upd
            ) AS RowNum
        ,pos.*
    FROM master.s_postn pos
    )

SELECT act.row_id
    ,People.SalesID
FROM master.s_evt_act act
INNER JOIN (
    SELECT myPos.RowNum AS update_count
        ,myPos.db_last_upd
        ,myPos.bu_id
        ,myPos.ou_id
        ,myPos.Name
        ,myPos.pr_emp_id
        ,regexp_extract(myPos.Name, '(\\d+)', 1) AS SalesID
    FROM myPos
    INNER JOIN (
        SELECT max(rowNum) maxRowNum
            ,pr_emp_id
        FROM myPos
        GROUP BY pr_emp_id
        ) AS maxPos ON myPos.pr_emp_id = maxPos.pr_emp_id
        AND myPos.rowNum = maxPos.maxRowNum
    WHERE lower(myPos.name) LIKE '% specifictitle %'
    ) AS People ON People.pr_emp_id = act.owner_per_id

С дополнительными данными, полученными в следующем запросе:

    SELECT sr_num
        ,owner_per_id
        ,x_cs_mgr_txt
    FROM mastertable.s_srv_req AS req
    WHERE req.x_cs_mgr_txt IS NOT NULL
        AND req.sr_stat_id <> 'Closed'

Это дополнительное объединение будет включено. Req.owner_per_id = act.owner_per_id

Я сделал много проб и ошибок и подумал, что мне нужна небольшая помощь.

Спасибо!

1 Ответ

0 голосов
/ 07 июня 2019

Трудно сказать что-то большее, чем попробовать это:

WITH myPos
AS (
    SELECT row_number() OVER (
            PARTITION BY pr_emp_id ORDER BY db_last_upd
            ) AS RowNum
        ,pos.*
    FROM master.s_postn pos
    )

SELECT act.row_id
    ,People.SalesID
FROM master.s_evt_act act
INNER JOIN (
    SELECT myPos.RowNum AS update_count
        ,myPos.db_last_upd
        ,myPos.bu_id
        ,myPos.ou_id
        ,myPos.Name
        ,myPos.pr_emp_id
        ,regexp_extract(myPos.Name, '(\\d+)', 1) AS SalesID
    FROM myPos
    INNER JOIN (
        SELECT max(rowNum) maxRowNum
            ,pr_emp_id
        FROM myPos
        GROUP BY pr_emp_id
        ) AS maxPos ON myPos.pr_emp_id = maxPos.pr_emp_id
        AND myPos.rowNum = maxPos.maxRowNum
    WHERE lower(myPos.name) LIKE '% specifictitle %'
    ) AS People ON People.pr_emp_id = act.owner_per_id
    INNER JOIN (
    SELECT sr_num
        ,owner_per_id
        ,x_cs_mgr_txt
    FROM mastertable.s_srv_req AS req
    WHERE req.x_cs_mgr_txt IS NOT NULL
        AND req.sr_stat_id <> 'Closed'
    ) AS req  ON req.owner_per_id = act.owner_per_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...