none
Consulta retornando valores duplicados RRS feed

  • 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.

    sexta-feira, 9 de janeiro de 2015 13:18

Respostas

Todas as Respostas

  • sexta-feira, 9 de janeiro de 2015 13:33
  • 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.

    sexta-feira, 9 de janeiro de 2015 14:27
  • 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.

    segunda-feira, 12 de janeiro de 2015 12:11