none
Resultado Duplicado RRS feed

  • Pergunta

  • Boa Tarde,

    Estou com o seguinte código, o mesmo está me retornando corretamente unificando os campos CPF e CNPJ, sendo que no resultado no grid está duplicando.

    select distinct
    iif(c.TaxId4 != ' ', c.TaxId4, c.TaxId0) as CPF_CNPJ,

    c.TaxId0,
    c.TaxId4,
    a.DocDate,
    a.DocNum,
    a.Serial,
    b.ItemCode,
    b.Dscription,
    b.Quantity,
    b.Price

    from OINV a
    inner join INV1 b
    on a.DocEntry = b.DocEntry
    inner join CRD7 c
    on a.CardCode = c.CardCode

    where
    a.CANCELED = 'N'
    and a.DocDate = CONVERT(DATE,GETDATE())
    and a.CardCode != 'C9999'
    and a.DocNum >= '30000'

    order by
    a.Serial

    Resultado do Grid

    quinta-feira, 1 de junho de 2017 21:20

Respostas

  • Experimente fazer uns testes dessa forma:

    select
        (select top(1) iif(c.TaxId4 <> ' ', c.TaxId4, c.TaxId0)
         from CRD7 c
         where 
            c.CardCode = a.CardCode and
            (c.TaxId4 is not null or c.TaxId0 is not null) 
        ) as CPF_CNPJ,
        a.DocDate, 
        a.DocNum, 
        a.Serial,
        b.ItemCode,
        b.Dscription,
        b.Quantity,
        b.Price
    from OINV a
    inner join INV1 b
        on a.DocEntry = b.DocEntry
    inner join 
    
    where
        a.CANCELED = 'N'
        and a.DocDate = CONVERT(DATE,GETDATE())
        and a.CardCode <> 'C9999'
        and a.DocNum >= '30000'
    order by
        a.Serial
    

    Sobre o filtro para obter apenas as vendas do dia, acho que está correto caso a coluna DocDate contenha a data sem as horas (ou com elas "zeradas") como as linhas da imagem que você postou. Acho melhor confirmar se existem vendas na tabela com a data de hoje.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 5 de junho de 2017 16:57

Todas as Respostas

  • Boa noite,

    Acredito que isso está ocorrendo porque está sendo feito um Join com a tabela CRD7 onde existem várias linhas (itens) para o mesmo documento.

    Como você gostaria que ficasse o resultado?


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 1 de junho de 2017 23:26
  • Bulcão,

    A observação do Gapimex tem todo sentido, normalmente pode ocorrer duplicação de linhas em uma junção quando a condição declarada no linha do On no join acaba forçando uma análise e apresentação de valores não únicos.

    Outro ponto importante consiste também nos joins declarados, verifique se realmente as tabelas que você esta "juntando" apresentam os critérios satisfatórios para apresentar os dados.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 2 de junho de 2017 00:47
  • O resultado que deveria ficar é o resultado do grid, sendo que tirando a duplicidade.

    sexta-feira, 2 de junho de 2017 13:12
  • Nas tabelas que estou juntando são OINV (Dados de Vendas), INV1 (Itens das Vendas), CRD7 (CPF ou CNPJ dos clientes).

    Como as informações de CPF e CNPJ estão em campos diferentes, fiz a junção no campo (CPF_CNPJ).
    • Editado Bulcão sexta-feira, 2 de junho de 2017 13:25
    sexta-feira, 2 de junho de 2017 13:23
  • Troquei o nome da tabela, na verdade me referia ao Join com a tabela INV1.

    Pelo que vi não são todas as colunas que estão duplicadas. As colunas ItemCode, Dscription, Quantity e Price não apresentam valores duplicados, então como deveriam ficar os valores dessas colunas? 


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 2 de junho de 2017 13:31
  • A tabela INV1 que contem esses itens. O que devo e unificar no resultado, são pelo DocNum ou Serial.

    sexta-feira, 2 de junho de 2017 15:42
  • Os dados dos itens são necessários nessa consulta?

    Se são, como os itens deveriam ser unificados?


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 2 de junho de 2017 16:52
  • os dados dos itens, descrição e quantidade são necessários, mas na consulta está duplicando duas vezes o mesmo lançamento.

    domingo, 4 de junho de 2017 01:48
  • Experimente fazer uns testes acrescentando o Group By para ver se é obtido o resultado esperado:

    select distinct
        iif(c.TaxId4 <> ' ', c.TaxId4, c.TaxId0) as CPF_CNPJ,
        a.DocDate, 
        a.DocNum, 
        a.Serial,
        b.ItemCode,
        b.Dscription,
        b.Quantity,
        b.Price
    from OINV a
    inner join INV1 b
        on a.DocEntry = b.DocEntry
    inner join CRD7 c
        on a.CardCode = c.CardCode
    
    where
        a.CANCELED = 'N'
        and a.DocDate = CONVERT(DATE,GETDATE())
        and a.CardCode <> 'C9999'
        and a.DocNum >= '30000'
    group by
        iif(c.TaxId4 <> ' ', c.TaxId4, c.TaxId0),
        a.DocDate, 
        a.DocNum, 
        a.Serial,
        b.ItemCode,
        b.Dscription,
        b.Quantity,
        b.Price
    order by
        a.Serial

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 5 de junho de 2017 12:10
  • Aliquei o código conforme orientado, mas não obtive resultado.

    segunda-feira, 5 de junho de 2017 13:45
  • Desconfio que esteja faltando ajustar as condições da clausula Where, talvez a data.

    Acho que o Group By não iria fazer com que a query deixasse de retornar algum resultado, no máximo iria agrupar.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 5 de junho de 2017 14:05
  • Retirei a linha and a.DocDate = CONVERT(DATE,GETDATE()) e coloquei somente para testar a linha, and a.DocDate Between '2017-06-03' and '2017-06-05', obtive o seguinte resultado;

    No que esta selecionado ele está trazendo o mesmo lançamento duplicado, sendo que em um não está CPF/CNPJ e no outro está o CPF/CNPJ onde necessito somente de uma informação unificada.


    segunda-feira, 5 de junho de 2017 15:38
  •  E que traga as vendas do dia por isso que no where ficou a linha and a.DocDate = CONVERT(DATE,GETDATE())

    segunda-feira, 5 de junho de 2017 15:39
  • Experimente fazer uns testes dessa forma:

    select
        (select top(1) iif(c.TaxId4 <> ' ', c.TaxId4, c.TaxId0)
         from CRD7 c
         where 
            c.CardCode = a.CardCode and
            (c.TaxId4 is not null or c.TaxId0 is not null) 
        ) as CPF_CNPJ,
        a.DocDate, 
        a.DocNum, 
        a.Serial,
        b.ItemCode,
        b.Dscription,
        b.Quantity,
        b.Price
    from OINV a
    inner join INV1 b
        on a.DocEntry = b.DocEntry
    inner join 
    
    where
        a.CANCELED = 'N'
        and a.DocDate = CONVERT(DATE,GETDATE())
        and a.CardCode <> 'C9999'
        and a.DocNum >= '30000'
    order by
        a.Serial
    

    Sobre o filtro para obter apenas as vendas do dia, acho que está correto caso a coluna DocDate contenha a data sem as horas (ou com elas "zeradas") como as linhas da imagem que você postou. Acho melhor confirmar se existem vendas na tabela com a data de hoje.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 5 de junho de 2017 16:57
  • Deu certo "gapimex", obrigado.

    segunda-feira, 5 de junho de 2017 21:02