【发布时间】:2019-06-05 17:26:51
【问题描述】:
我有一个查询,它带来了三年(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"
【问题讨论】:
-
我想您会像添加 2018 年数据一样添加 2019 年数据......只需更改日期即可。
-
这个查询不是我建的,入队的时候已经在线了,做的人已经不在了
-
那么这可能是修复它的好时机。似乎每年使用 UNION 并不是一个好方法。似乎做一个支点(也许是动态的)会简单得多。好吧,也许并不简单,但会消除不断更改查询以添加另一年数据的需要。
-
我会阅读并提高我的技能,谢谢。
标签: sql sql-server database sql-server-2008