Problemas em um selectp
Estou montando um sistema de controle de ordem de servico, onde tem a coluna datasolicitacao e dataconclusao e tenho que montar um grafico onde tenho que contar as ordem de servico solicitadas e concluidas e agrupar por mes mas no group by tenho que escolher somente uma das datas ai nao conta as os corretamente. Exemplo a ordem criada no mes anterior e concluida em outro mes nao conta corretamente, so conta quando as duas estao no mesmo mes
Leonardo Alves
Curtidas 0
Melhor post
Emerson Nascimento
06/08/2018
tente assim:
SELECT d.ano, d.mes, SUM(CASE WHEN year(os.dataAutorizacao) = d.ano and month(os.dataAutorizacao) = d.mes THEN 1 ELSE 0 END) autorizadas, SUM(CASE WHEN year(os.dataConclusao) = d.ano and month(os.dataConclusao) = d.mes THEN 1 ELSE 0 END) concluidas FROM (SELECT year(dataAutorizacao) ano, month(dataAutorizacao) mes FROM manutencao_OS WHERE dataAutorizacao is not null GROUP BY 1, 2 UNION SELECT year(dataConclusao) ano, month(dataConclusao) mes FROM manutencao_OS WHERE dataConclusao is not null GROUP BY 1, 2 ) d LEFT JOIN manutencao_OS os on (year(os.dataAutorizacao) = d.ano and month(os.dataAutorizacao) = d.mes) or (year(os.dataConclusao) = d.ano and month(os.dataConclusao) = d.mes) GROUP BY d.ano, d.mes ORDER BY d.ano, d.mes
GOSTEI 1
Mais Respostas
Luciano
03/08/2018
Enviai o SELECT pra a gente dar uma olhada.
GOSTEI 0
Leonardo Alves
03/08/2018
SELECT
count(os.dataAutorizacao) as autorizacao,
count(os.dataConclusao) as concluida,
(CASE month(dataAutorizacao)
when 1 then 'Jan'
when 2 then 'Fev'
when 3 then 'Mar'
when 4 then 'Abr'
when 5 then 'Mai'
when 6 then 'Jun'
when 7 then 'Jul'
when 8 then 'Ago'
when 9 then 'Set'
when 10 then 'Out'
when 11 then 'Nov'
when 12 then 'Dez'
END) as meses,
year(dataAutorizacao) AS ano
FROM manutencao_OS os
inner join manutencao_local l on (l.idlocal = os.local)
where os.dataAutorizacao is not null
GROUP BY month(os.dataAutorizacao)
count(os.dataAutorizacao) as autorizacao,
count(os.dataConclusao) as concluida,
(CASE month(dataAutorizacao)
when 1 then 'Jan'
when 2 then 'Fev'
when 3 then 'Mar'
when 4 then 'Abr'
when 5 then 'Mai'
when 6 then 'Jun'
when 7 then 'Jul'
when 8 then 'Ago'
when 9 then 'Set'
when 10 then 'Out'
when 11 then 'Nov'
when 12 then 'Dez'
END) as meses,
year(dataAutorizacao) AS ano
FROM manutencao_OS os
inner join manutencao_local l on (l.idlocal = os.local)
where os.dataAutorizacao is not null
GROUP BY month(os.dataAutorizacao)
GOSTEI 0
Emerson Nascimento
03/08/2018
tente assim:
desta forma serão contadas todas as OS autorizadas no mês, e a contagem OS concluídas será aquela aberta dentro do mês, independente da data de conclusão.
SELECT year(dataAutorizacao) AS ano, (CASE month(dataAutorizacao) when 1 then 'Jan' when 2 then 'Fev' when 3 then 'Mar' when 4 then 'Abr' when 5 then 'Mai' when 6 then 'Jun' when 7 then 'Jul' when 8 then 'Ago' when 9 then 'Set' when 10 then 'Out' when 11 then 'Nov' when 12 then 'Dez' END) as mes, count(os.dataAutorizacao) as autorizadas, sum(case when dataConclusao is null then 0 else 1 end) as concluidas FROM manutencao_OS os inner join manutencao_local l on (l.idlocal = os.local) where os.dataAutorizacao is not null GROUP BY year(dataAutorizacao), month(os.dataAutorizacao)
desta forma serão contadas todas as OS autorizadas no mês, e a contagem OS concluídas será aquela aberta dentro do mês, independente da data de conclusão.
GOSTEI 0
Leonardo Alves
03/08/2018
mas preciso contar quantas os concluídas tem determinado mes
GOSTEI 0
Leonardo Alves
03/08/2018
TIPO ASSIM
SELECT count(dataConclusao) as autorizada FROM los_interno.manutencao_OS where month(dataConclusao) = 8 and year(dataConclusao) = 2018
RESULTADO = 27
E NO SELECT ANTERIOR DA RESULTADO = 13
SELECT count(dataConclusao) as autorizada FROM los_interno.manutencao_OS where month(dataConclusao) = 8 and year(dataConclusao) = 2018
RESULTADO = 27
E NO SELECT ANTERIOR DA RESULTADO = 13
GOSTEI 0
Luciano
03/08/2018
Não entendi. Você já escolheu a Melhor Resposta, Leonardo. Significa que já conseguiu ou ainda precisa de ajustes na query enviada por Emerson?
Qualquer coisa, me avisa.
;-)
Qualquer coisa, me avisa.
;-)
GOSTEI 0