none
Consulta SQL retornando dados vezes 5 RRS feed

  • Pergunta

  • Boa tarde prezados,

    A SQL abaixo está retornando 5X a quantidade que deveria:

    With SQ1 as
    
    (select
    a.CODCOLIGADA,
    a.NUMEROMOV,
    a.CODTMV,
    f.NOME as 'NomeEstoque',
    a.IDMOV,
    a.CODFILIAL,
    a.DATAEMISSAO,
    c.NOME,
    b.IDPRD,
    d.NOMEFANTASIA,
    e.SALDOFISMAX,
    e.CODLOC
    from tmov as A
    inner join TITMMOV as B
    on a.CODCOLIGADA=b.CODCOLIGADA and a.IDMOV=b.IDMOV
    inner join gccusto as C
    on b.CODCOLIGADA=c.CODCOLIGADA and b.CODCCUSTO=c.CODCCUSTO
    inner join tproduto as D
    on b.IDPRD=d.IDPRD
    inner join TPRDLOCINFO as E
    on d.IDPRD=e.IDPRD
    inner join tloc as F
    on a.CODCOLIGADA=f.CODCOLIGADA and a.CODFILIAL=f.CODFILIAL and a.CODLOC=f.CODLOC
    where a.CODFILIAL='3'
    and a.CODTMV IN ('2.1.20','2.2.10','2.2.22','1.1.20','1.2.20')
    and d.CODIGOPRD='000661'
    and a.DATAEMISSAO = '2020-03-25 00:00:00.000' and a.IDMOV='520535'
    ),
    
    SQ2 as
    
    (select * from TRELSLD as a)
    
    select
    a.nomeestoque as 'Nome Estoque',
    a.CODLOC as 'Código Local',
    a.IDMOV,
    a.NUMEROMOV,
    a.CODTMV,
    a.IDPRD as 'ID',
    a.NOME as 'Setor',
    a.NOMEFANTASIA as 'Produto',
    (a.SALDOFISMAX) as 'Máximo',
    (b.QTDECOMSINAL) * -1 as 'Quantidade',
    (b.VALORFINCOMSINAL) * - 1 as 'Valor'
    from SQ1 as A
    inner join sq2 as B
    on a.IDMOV=b.IDMOV and a.IDPRD=b.IDPRD and a.CODLOC=b.CODLOC 
    
    
    
    
    
    

    Alguma sugestão??

    Agradeço.


    quinta-feira, 26 de março de 2020 17:53

Todas as Respostas

  • Gelain,

    Normalmente quando se deparamos com dados duplicados após o processamento de um bloco Select, se relaciona com as junções declaradas em nosso comando, sendo assim, inicialmente verifique este trecho:

    from tmov as A
    inner join TITMMOV as B
    on a.CODCOLIGADA=b.CODCOLIGADA and a.IDMOV=b.IDMOV
    inner join gccusto as C
    on b.CODCOLIGADA=c.CODCOLIGADA and b.CODCCUSTO=c.CODCCUSTO
    inner join tproduto as D
    on b.IDPRD=d.IDPRD
    inner join TPRDLOCINFO as E
    on d.IDPRD=e.IDPRD
    inner join tloc as F
    on a.CODCOLIGADA=f.CODCOLIGADA and a.CODFILIAL=f.CODFILIAL and a.CODLOC=f.CODLOC

    Em adicional, não entendi o motivo de criar um outra CTE para trazer todos os dados:

    (select * from TRELSLD as a)

    E depois você estabelecer um junção com a primeira CTE, este é um grande indicador que podemos estar forçando a leitura e apresentação de linhas de registros.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 26 de março de 2020 18:22