Ir para conteúdo

Em duplicidade SQL


lucas1985

Posts Recomendados


  • Tópicos Que Criei:  3
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  9
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  79
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  38

Boa tarde!

Gostaria de contar com a ajuda de vcs novamente, tenho uma SQL montada, só que ela esta puxando alguns lançamentos em duplicidades, seria possível vcs me ajudarem a corrigir para não vir lançamentos em duplicidade.

Em anexo arquivo txt com a SQL

 

 

RMfiscal.txt

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

usa a função distinct

SELECT [ ALL | DISTINCT ]  
[ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]   
<select_list>  

ALL
Especifica que linhas duplicadas podem aparecer no conjunto de resultados. 
ALL é o padrão.
DISTINCT
Especifica que só linhas exclusivas podem aparecer no conjunto de resultados. 
Valores nulos são considerados iguais para os propósitos
da palavra-chave DISTINCT.

O par de colchetes no trecho [ ALL | DISTINCT ] indica que os dois argumentos são opcionais e que se informados são mutuamente exclusivos, isto é, ou um ou outro. Como consta na documentação o argumento ALL é o padrão, ou seja, se nenhum dos argumentos constar do comando, assume-se a presença de ALL. A respeito do argumento DISTINCT a documentação cita linhas exclusivas, entende-se por valores não repetidos.

Editado por omar
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  3
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  9
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  79
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  38

Excelente tarde, Omar!

Coloquei o DISTINCT, não sei se estou fazendo certo, mas continua puxando em duplicidade.

Veja imagem em anexo

Resultado.jpg

Select.jpg

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  4
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  8
  • Conteúdo/Dia:  0.00
  • Reputação:   1
  • Pontos/Conquistas:  82
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  22

Boa tarde Lucas!

Pelo que vi, a sua consulta não está vindo duplicada, pois os demais campos da tabela são diferentes, como na coluna VALORCONT.

A função DISTINCT irá mesclar as células que possuem todas as linhas iguais.

Por exemplo, se uma tabela traz dois registros com duas colunas iguais, como abaixo:

Código - (SELECT NOME, CIDADE FROM GFILIAL WHERE NOME = 'FJN')

NOME CIDADE
FJN JUAZEIRO
FJN JUAZEIRO

e você usar um DISTINCT, como abaixo:

Código - (SELECT DISTINCT NOME, CIDADE FROM GFILIAL WHERE NOME = 'FJN')

Ficará apenas um registro.

NOME CIDADE
FJN JUAZEIRO

 

  • Like 1
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

Também na data de entrada são informações diferentes.

  • Like 1
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  3
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  9
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  79
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  38

Bom dia! Esse mesmo fornecedor tenho ele na coligada 2, mesmo colocando para puxar a coligada 1 puxa em duplicidade, se vc observar os documentos são os mesmos números, id e mesmas datas de entrada.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

Remove os selects internos e veja se continua duplicado. 

Caso não apareçam duplicados, o problema ocorre por causa dos selects internos.    Vc tem certeza que não existem colunas com valores diferentes ?

Editado por omar
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  3
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  9
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  79
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  38

17 horas atrás, omar disse:

Remove os selects internos e veja se continua duplicado. 

Caso não apareçam duplicados, o problema ocorre por causa dos selects internos.    Vc tem certeza que não existem colunas com valores diferentes ?

Bom dia! Não tem valores diferentes.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

Lucas, você tem alguns problemas estruturais na sua sentença... que podem gerar seu problema, bem como pode causar o retorno de informações erradas, e até deixar a sentença mais lenta. 

INNER JOIN FCFO (nolock) ON 
    (FCFO.CODCFO=DLAF.EMITENTECFO OR FCFO.CODCFO=DLAF.CODCFOORIGEMDESTINO)
    AND FCFO.CODCOLIGADA=DLAF.CODCOLCFO

-- ESSA PARTE ACIMA VC TEM QUE POR, MESMO QUE SEUS CLIFOR SEJAM GLOBAIS. E SE NÃO FOR, PIOR... AI ESTÁ ERRADO MESMO... E JÁ QUE ESTÁ USANDO OR NA LINHA ACIMA, TEVE QUE COLOCAR PARENTESIS TAMBÉM... 

EM nenhum SUBSELECT seu você trata CodColigada... tem que tratar. Isso é um erro, e repito o que falei acima. 

Exemplo (parte...):

    (select DTRBITEM.CODTRB FROM DTRBITEM 
        where DTRBITEM.CODTRB='PIS' AND
            DTRBITEM.IDLAF=DITEM.IDLAF AND DTRBITEM.CODCOLIGADA=DITEM.CODCOLIGADA AND
             DTRBITEM.NUMITEM=DITEM.NUMITEM) [PIS],
    (select DTRBITEM.BASETRB FROM DTRBITEM 
        where DTRBITEM.CODTRB='PIS' AND 
         DTRBITEM.IDLAF=DITEM.IDLAF AND
        DTRBITEM.NUMITEM=DITEM.NUMITEM) [BC PIS],

 

INNER JOIN TMOV ON DLAF.IDMOV=TMOV.IDMOV --- CADE O JOIN DE CODCOLIGADA AQUI TAMBEM??

 

Por ultimo, veja ao retornarem os dados, se realmente não está vindo nada de diferente na consulta, pois, o DISTINCT apenas traz um registro quando há uma repetição completa da linha de retorno. Se uma vírgula for diferente ele mostra as duas ou mais linhas. 

  • Like 2
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  3
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  9
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  79
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  38

1 hora atrás, Jair - Fórmula disse:

Lucas, você tem alguns problemas estruturais na sua sentença... que podem gerar seu problema, bem como pode causar o retorno de informações erradas, e até deixar a sentença mais lenta. 

INNER JOIN FCFO (nolock) ON 
    (FCFO.CODCFO=DLAF.EMITENTECFO OR FCFO.CODCFO=DLAF.CODCFOORIGEMDESTINO)
    AND FCFO.CODCOLIGADA=DLAF.CODCOLCFO

-- ESSA PARTE ACIMA VC TEM QUE POR, MESMO QUE SEUS CLIFOR SEJAM GLOBAIS. E SE NÃO FOR, PIOR... AI ESTÁ ERRADO MESMO... E JÁ QUE ESTÁ USANDO OR NA LINHA ACIMA, TEVE QUE COLOCAR PARENTESIS TAMBÉM... 

EM nenhum SUBSELECT seu você trata CodColigada... tem que tratar. Isso é um erro, e repito o que falei acima. 

Exemplo (parte...):

    (select DTRBITEM.CODTRB FROM DTRBITEM 
        where DTRBITEM.CODTRB='PIS' AND
            DTRBITEM.IDLAF=DITEM.IDLAF AND DTRBITEM.CODCOLIGADA=DITEM.CODCOLIGADA AND
             DTRBITEM.NUMITEM=DITEM.NUMITEM) [PIS],
    (select DTRBITEM.BASETRB FROM DTRBITEM 
        where DTRBITEM.CODTRB='PIS' AND 
         DTRBITEM.IDLAF=DITEM.IDLAF AND
        DTRBITEM.NUMITEM=DITEM.NUMITEM) [BC PIS],

 

INNER JOIN TMOV ON DLAF.IDMOV=TMOV.IDMOV --- CADE O JOIN DE CODCOLIGADA AQUI TAMBEM??

 

Por ultimo, veja ao retornarem os dados, se realmente não está vindo nada de diferente na consulta, pois, o DISTINCT apenas traz um registro quando há uma repetição completa da linha de retorno. Se uma vírgula for diferente ele mostra as duas ou mais linhas. 

Excelente tarde, Jair!

Conforme sua explicação funcionou perfeito. Mais uma vez muito obrigado!

Obrigado a todos pela colaboração.

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.