从查询中获取 2019 年的结果

Getting 2019 results from query

我有一个查询,其中包含三年(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"

您需要在关闭子查询之前添加另一个 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

我回答了您需要向查询中添加所需数据的内容,但正如评论中所述,这是进行此查询的糟糕 方式。阅读 pivoting,我认为这是重新处理此查询的正确方法。