没有显示我需要的结果

时间:2016-03-21 10:18:50

标签: mysql sql

我有这个查询

SELECT t1.ano, 
t1.mes,
t1.departamento_id, 
t1.departamento_nome, 
tempo_extra, 
tempo_ativo, 
tempo_extra/tempo_ativo AS volume_extra 
FROM ( 
SELECT 
YEAR(`data`) AS ano, 
MONTH(`data`) AS mes, 
departamentos.id AS departamento_id, 
departamentos.nome AS departamento_nome, 
SUM(tempo) AS tempo_extra 
FROM rh.aprovacoes LEFT JOIN rh.colaboradores ON colaboradores.id=aprovacoes.colaborador_id 
LEFT JOIN rh.departamentos ON departamentos.id=colaboradores.departamento_id
WHERE (tipo = 'BH' OR tipo = 'HE') AND (YEAR(aprovacoes.`data`)=2016 AND 
MONTH(aprovacoes.`data`)=2 AND colaboradores.departamento_id=2) OR 
(YEAR(aprovacoes.`data`)=2016 AND MONTH(aprovacoes.`data`)=1 AND colaboradores.departamento_id=2) 
GROUP BY colaboradores.departamento_id, MONTH(`data`) 
ORDER BY departamentos.nome ASC) AS t1 
LEFT JOIN ( 
SELECT YEAR(`data`) AS ano, 
 MONTH(`data`) AS mes, 
departamentos.id AS departamento_id, 
departamentos.nome AS departamento_nome, 
SUM(ativo) AS tempo_ativo 
FROM rh.processamento 
LEFT JOIN rh.colaboradores ON colaboradores.id=processamento.colaborador_id 
LEFT JOIN rh.departamentos ON departamentos.id=colaboradores.departamento_id 
 WHERE 1=1 AND (YEAR(processamento.`data`)=2016 AND MONTH(processamento.`data`)=2 AND colaboradores.departamento_id=2) OR (YEAR(processamento.`data`)=2016 AND MONTH(processamento.`data`)=1 AND colaboradores.departamento_id=2) 
GROUP BY colaboradores.departamento_id, MONTH(`data`)) AS t2 ON t1.departamento_id = t2.departamento_id 
ORDER BY ano ASC, mes ASC;

它给了我这个结果:

ano mes departamento_id departamento_nome tempo_extra tempo_ativo volume_extra
2016 1     2            Administrativa    -73009      5562638     -0.0131
2016 1     2            Administrativa    -73009      6463516     -0.0113
2016 2     2            Administrativa    -198599     5562638     -0.0357
2016 2     2            Administrativa    -198599     6463516     -0.0307

但应该是这样的:

ano mes departamento_id departamento_nome tempo_extra tempo_ativo volume_extra
2016 1     2            Administrativa    -73009      5562638     -0.0131
2016 2     2            Administrativa    -198599     6463516     -0.0307

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要使用他们的日期加入这两个子查询,而不仅仅是部门ID,因此您不会获得所有日期的交叉产品。因此,将ON子句更改为

ON t1.departamento_id = t2.departamento_id AND t1.ano = t2.ano AND t1.mes = t2.mes