Usuário com melhor resposta
Consulta retornando valores duplicados

Pergunta
-
Bom dia pessoal do forum,
O problema é que estou mechendo com um sistema de compras só que tem solicitações de compra com mesmo numero de movimento pelo fato do tipo de movimento serem diferente, estou com problema de gerar relatorio porque quando vou gerar os nomes das pessoas que aprovaram estão saindo uma bagunça, porque quem aprova os movimentos de diretores são 5. o solicitante 1.1.01 faz a solicitação e dependendo de qm tem que aprovar no caso a aprovação ('1.1.02', '1.1.05', '1.1.06' ou '1.1.07'), mas mesmo assim passando por estes solicitantes quando vou gerar o relatorio de quem aprovou aparece de outros setores os nomes.
SELECT case when codusuario in ('dirangelina') then 'DIRETOR GERAL' else UPPER(NOME) end FROM GUSUARIO WHERE CODUSUARIO IN( SELECT tmov.usuariocriacao FROM tmov where tmov.numeromov='000001' AND TMOV.CODTMV in ('1.1.02','1.1.03','1.1.05', '1.1.06', '1.1.07')and tmov.codcoligada='1' and tmov.idmov = (SELECT min(tmov.idmov) FROM tmov where tmov.numeromov='000001' AND TMOV.CODTMV in ('1.1.02','1.1.03','1.1.05', '1.1.06', '1.1.07') and tmov.codcoligada='1' and tmov.IDMOV= (select case when CODFILIAL='1' and tmov.CODTMV in('1.1.05', '1.1.06', '1.1.07') then tmov.IDMOV when CODFILIAL='3' and tmov.CODTMV='1.1.02' then tmov.IDMOV when CODFILIAL='4' and tmov.CODTMV='1.1.07' then tmov.IDMOV else '' end from TMOV where tmov.codcoligada='1' AND tmov.numeromov='000001' AND TMOV.CODTMV in ('1.1.02','1.1.03','1.1.05', '1.1.06', '1.1.07') )))
CharlesTI.
Respostas
-
Bom dia!
Dá uma olhadinha neste link, vê se te ajuda.
- Sugerido como Resposta Roberto F FonsecaModerator segunda-feira, 12 de janeiro de 2015 14:41
- Marcado como Resposta CHARLES.PTU segunda-feira, 12 de janeiro de 2015 15:51
-
Em alguns casos, é melhor você fazer uma select em tabelas temporárias, separando os itens, e então, numa única SQL trazer o que precisa baseado nas tabelas temporárias. Digo isso, porque fazer muita sub-select, com case, e funções de agregadores na cláusula where vai causar muita lentidão a longo prazo.
Tipo, faça por partes, saca?
select * into #DADOS from GUSUARIO (sem os where´s com case e subselect)
Então, com o resultado #DADOS você vai filtrando parte por parte até chegar no seu resultado. Além de ficar mais performático, você vai conseguir detectar onde está a causa da duplicidade.
- Sugerido como Resposta Roberto F FonsecaModerator segunda-feira, 12 de janeiro de 2015 14:42
- Marcado como Resposta CHARLES.PTU segunda-feira, 12 de janeiro de 2015 15:51
Todas as Respostas
-
Bom dia!
Dá uma olhadinha neste link, vê se te ajuda.
- Sugerido como Resposta Roberto F FonsecaModerator segunda-feira, 12 de janeiro de 2015 14:41
- Marcado como Resposta CHARLES.PTU segunda-feira, 12 de janeiro de 2015 15:51
-
Em alguns casos, é melhor você fazer uma select em tabelas temporárias, separando os itens, e então, numa única SQL trazer o que precisa baseado nas tabelas temporárias. Digo isso, porque fazer muita sub-select, com case, e funções de agregadores na cláusula where vai causar muita lentidão a longo prazo.
Tipo, faça por partes, saca?
select * into #DADOS from GUSUARIO (sem os where´s com case e subselect)
Então, com o resultado #DADOS você vai filtrando parte por parte até chegar no seu resultado. Além de ficar mais performático, você vai conseguir detectar onde está a causa da duplicidade.
- Sugerido como Resposta Roberto F FonsecaModerator segunda-feira, 12 de janeiro de 2015 14:42
- Marcado como Resposta CHARLES.PTU segunda-feira, 12 de janeiro de 2015 15:51
-
Bom dia Raphael Moreira,
então a respeito da duplicidade achei sim. O numero de movimento ta fazendo gerar o nome de usuario que mexeu nos meus pedidos porém esta fazendo isso para todos os outros pedidos. Sempre aparecendo o mesmo nome para todos os demais.
CharlesTI.