从查询中获取 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,我认为这是重新处理此查询的正确方法。
我有一个查询,其中包含三年(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,我认为这是重新处理此查询的正确方法。