Получение 2019 результатов из запроса - PullRequest
0 голосов
/ 10 января 2019

У меня есть запрос, который приносит результаты за три года (2016, 2017 и 2018), и теперь мне нужно включить четвертый год (2019), и я понятия не имею, как я мог это сделать.

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

SELECT MAX(qnt2016) as qnt2016, MAX(qnt2017) as qnt2017, MAX(qnt2018) as qnt2018, empresa FROM
(SELECT CASE WHEN COUNT(cliente) IS NULL THEN 0
        ELSE COUNT(cliente) END AS qnt2016,  0 as qnt2017, 0 as qnt2018, empresa, rep
        FROM
        (SELECT E026RAM.CODRAM tipo, E026RAM.DESRAM nome, E085HCL.CODCLI cliente, E085HCL.CODREP rep, E090REP.APEREP empresa
        FROM
        E085HCL, E090REP, E085CLI, E026RAM, E070EMP, E007UFS
        WHERE
        ((E085CLI.SITCLI = 'A')) AND
        ((E026RAM.CODRAM in (1,2,3))) AND
        (((E085CLI.DATCAD >= '2000-01-01') AND (E085CLI.DATCAD <= '2016-12-31'))) AND
        ((E085HCL.CODEMP = 1)) AND
        ((E085CLI.SIGUFS = E007UFS.SIGUFS) AND 
         (E085HCL.CODREP = E090REP.CODREP) AND
        (E085CLI.CODRAM = E026RAM.CODRAM) AND 
        (E085HCL.CODCLI = E085CLI.CODCLI) AND 
        (E085HCL.CODEMP = E070EMP.CODEMP))) C2018
        where tipo not in (10, 15)
        GROUP BY rep, empresa

        union all

        SELECT  0 as qnt2016, CASE WHEN COUNT(cliente) IS NULL THEN 0
                ELSE COUNT(cliente) END AS qnt2017, 0 as qnt2018, empresa, rep
        FROM
        (SELECT E026RAM.CODRAM tipo, E026RAM.DESRAM nome, E085HCL.CODCLI cliente, E085HCL.CODREP rep, E090REP.APEREP empresa
        FROM
      E085HCL, E090REP, E085CLI, E026RAM, E070EMP, E007UFS
        WHERE
        ((E085CLI.SITCLI = 'A')) AND
       ((E026RAM.CODRAM in (1,2,3))) AND
        (((E085CLI.DATCAD >= '2000-01-01') AND (E085CLI.DATCAD <= '2017-12-31'))) AND
        ((E085HCL.CODEMP = 1)) AND
        ((E085CLI.SIGUFS = E007UFS.SIGUFS) AND 
         (E085HCL.CODREP = E090REP.CODREP) AND
        (E085CLI.CODRAM = E026RAM.CODRAM) AND 
        (E085HCL.CODCLI = E085CLI.CODCLI) AND 
        (E085HCL.CODEMP = E070EMP.CODEMP))) C2018
        where tipo not in (10, 15)
        GROUP BY rep, empresa

        union all

        SELECT 0 as qnt2016, 0 as qnt2017, CASE WHEN COUNT(cliente) IS NULL THEN 0
                ELSE COUNT(cliente) END AS qnt2018, empresa, rep
        FROM
        (SELECT
        E026RAM.CODRAM tipo, E026RAM.DESRAM nome, E085HCL.CODCLI cliente, E085HCL.CODREP rep, E090REP.APEREP empresa
        FROM
       E085HCL, E090REP, E085CLI, E026RAM, E070EMP, E007UFS
        WHERE
        ((E085CLI.SITCLI = 'A')) AND
        ((E026RAM.CODRAM in (1,2,3))) AND
        (((E085CLI.DATCAD >= '2000-01-01') AND (E085CLI.DATCAD <= '2018-12-31'))) AND
        ((E085HCL.CODEMP = 1)) AND
        ((E085CLI.SIGUFS = E007UFS.SIGUFS) AND 
         (E085HCL.CODREP = E090REP.CODREP) AND
        (E085CLI.CODRAM = E026RAM.CODRAM) AND 
        (E085HCL.CODCLI = E085CLI.CODCLI) AND 
        (E085HCL.CODEMP = E070EMP.CODEMP))) C2018
        where tipo not in (10, 15)
        GROUP BY rep, empresa, rep) select2
        GROUP BY empresa, rep
        order by rep"

1 Ответ

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

Вам нужно добавить еще UNION ALL перед закрытием подзапроса и добавить новое поле ко всем SELECT операторам

SELECT MAX(qnt2016) as qnt2016, MAX(qnt2017) as qnt2017, MAX(qnt2018) as qnt2018, MAX(qnt2019) as qnt2019, empresa FROM
               (SELECT CASE WHEN COUNT(cliente) IS NULL THEN 0
                ELSE COUNT(cliente) END AS qnt2016,  0 as qnt2017, 0 as qnt2018, 0 as qnt2019, empresa, rep
                                FROM
                ...
               union all

                SELECT 0 as qnt2016, 0 as qnt2017, , 0 as qnt2018, CASE WHEN COUNT(cliente) IS NULL THEN 0
                        ELSE COUNT(cliente) END AS qnt2019, empresa, rep
                FROM
                (SELECT
                E026RAM.CODRAM tipo, E026RAM.DESRAM nome, E085HCL.CODCLI cliente, E085HCL.CODREP rep, E090REP.APEREP empresa
                FROM
               E085HCL, E090REP, E085CLI, E026RAM, E070EMP, E007UFS
                WHERE
                ((E085CLI.SITCLI = 'A')) AND
                ((E026RAM.CODRAM in (1,2,3))) AND
                (((E085CLI.DATCAD >= '2000-01-01') AND (E085CLI.DATCAD <= '2019-12-31'))) AND
                ((E085HCL.CODEMP = 1)) AND
                ((E085CLI.SIGUFS = E007UFS.SIGUFS) AND 
                 (E085HCL.CODREP = E090REP.CODREP) AND
                (E085CLI.CODRAM = E026RAM.CODRAM) AND 
                (E085HCL.CODCLI = E085CLI.CODCLI) AND 
                (E085HCL.CODEMP = E070EMP.CODEMP))) C2018
                where tipo not in (10, 15)
                GROUP BY rep, empresa, rep) select2
                GROUP BY empresa, rep
                order by rep

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...