Usuário com melhor resposta
Ajuda com consulta (left join + case)

Pergunta
-
Olá comunidade, estou tentando realizar uma consulta (virará uma procedure) com o seguinte cenário:
Tenho uma base de uma empresa e nela possuo duas tabelas: uma com relação dos funcionários ativos e demitidos e uma com os demitidos que contém a informação de tipo de demissão (se voluntária ou involuntária)
No select, preciso do periodo (dia), ativos, demitidos, demitidos_voluntario e demitidos_involuntarios
Tentei o seguinte código:
select e.periodo, e.ativos, e.admitidos, e.demitidos, case when d.iniciativa = 'Empregado' and e.periodo = d.dt_desligamento then COUNT(d.iniciativa) end as demitidos_vol, case when d.iniciativa = 'Empresa' and e.periodo = d.dt_desligamento then COUNT(d.iniciativa) end as demitidos_inv from tb_evolucao_estrutura_grupo e left join tb_demitidos d on e.periodo = d.dt_desligamento group by e.periodo, e.ativos, e.admitidos, e.demitidos, d.iniciativa, d.dt_desligamento order by e.periodo
Com este código consigo o desejado, porém ele me duplica a linha quando possuo tanto voluntários quanto involuntários no mesmo dia.
Também gostaria que invés de null mostrasse 0 quando não possui desligamento voluntario/involuntario no dia.
Alguém pode me ajudar?
Grato desde já.
Respostas
-
Boa tarde,
Experimente dessa forma:
select e.periodo, e.ativos, e.admitidos, e.demitidos, COUNT(case when d.iniciativa = 'Empregado' then 1 end) as demitidos_vol, COUNT(case when d.iniciativa = 'Empresa' then 1 end) as demitidos_inv from tb_evolucao_estrutura_grupo e left join tb_demitidos d on e.periodo = d.dt_desligamento group by e.periodo, e.ativos, e.admitidos, e.demitidos order by e.periodo
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex terça-feira, 6 de novembro de 2018 16:17
- Marcado como Resposta Diego Devesa quarta-feira, 14 de novembro de 2018 11:55
Todas as Respostas
-
Boa tarde,
Experimente dessa forma:
select e.periodo, e.ativos, e.admitidos, e.demitidos, COUNT(case when d.iniciativa = 'Empregado' then 1 end) as demitidos_vol, COUNT(case when d.iniciativa = 'Empresa' then 1 end) as demitidos_inv from tb_evolucao_estrutura_grupo e left join tb_demitidos d on e.periodo = d.dt_desligamento group by e.periodo, e.ativos, e.admitidos, e.demitidos order by e.periodo
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex terça-feira, 6 de novembro de 2018 16:17
- Marcado como Resposta Diego Devesa quarta-feira, 14 de novembro de 2018 11:55
-
Diego,
Ao invés de utilizar Left Join, tente com o Inner! Além disso, aplique o comando Distinct para tentar evitar esta duplicidade, algo que nem sempre será possível evitar dependendo da relação e junção dos dados.
Em relação ao Null que esta sendo apresentado, utilize a função IsNull na respectiva coloque e informe o valor que deseja ser apresentado.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Olá comunidade, estou tentando realizar uma consulta (virará uma procedure) com o seguinte cenário:
Tenho uma base de uma empresa e nela possuo duas tabelas: uma com relação dos funcionários ativos e demitidos e uma com os demitidos que contém a informação de tipo de demissão (se voluntária ou involuntária)
No select, preciso do periodo (dia), ativos, demitidos, demitidos_voluntario e demitidos_involuntarios
Tentei o seguinte código:
select e.periodo, e.ativos, e.admitidos, e.demitidos, case when d.iniciativa = 'Empregado' and e.periodo = d.dt_desligamento then COUNT(d.iniciativa) end as demitidos_vol, case when d.iniciativa = 'Empresa' and e.periodo = d.dt_desligamento then COUNT(d.iniciativa) end as demitidos_inv from tb_evolucao_estrutura_grupo e left join tb_demitidos d on e.periodo = d.dt_desligamento group by e.periodo, e.ativos, e.admitidos, e.demitidos, d.iniciativa, d.dt_desligamento order by e.periodo
Com este código consigo o desejado, porém ele me duplica a linha quando possuo tanto voluntários quanto involuntários no mesmo dia.
Também gostaria que invés de null mostrasse 0 quando não possui desligamento voluntario/involuntario no dia.
Alguém pode me ajudar?
Grato desde já.
Resolveu meu problema, obrigado!
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 14 de novembro de 2018 21:46