none
Consulta busca o mesmo registro mais de uma vez. RRS feed

  • Pergunta

  • Bom dia. Gostaria de saber porque essa query tá buscando um mesmo registro quatro vezes. Já usei DISTINCT e também não deu certo. 

    O Campo TP_SIT tá como tributado='T', então aparece D, F e T que são as opões para o cadastro. 

    SELECT DISTINCT p.idproduto,p.descrcomproduto, g.DESCRRESPRODUTO,VARCHAR_FORMAT(g.DTULTIMAALTERACAO, 'dd/MM/yyyy') AS DATA,
    t.tiposittribent AS TP_SIT, g.ncm,g.codcest
    FROM PRODUTO P, PRODUTO_GRADE G, PRODUTO_TRIBUTACAO_ESTADO T
    WHERE p.idproduto=g.idproduto
    AND p.descrcomproduto like 'ACETONA%'
    --AND g.DTULTIMAALTERACAO > '15.10.2015'
    AND t.uf='MS'
    AND g.flaginativo='F'
    GROUP BY
    p.idproduto,
    p.descrcomproduto,
    g.DESCRRESPRODUTO,
    g.DTULTIMAALTERACAO,
    t.tiposittribent,
    g.ncm,g.codcest

    quinta-feira, 6 de outubro de 2016 13:53

Respostas

Todas as Respostas

  • José,

    Não entendi exatamente sua necessidade.

    Você precisa que apareçam apenas os registros que possuem o campo t.tiposittribent = 'T'?

    Tens como nos enviar exemplos de consulta para entender o que está retornando duplicado?


    Felipe Lauffer
    MCT | MCSE: Data Management & Analytics | MCSE: Data Platform | MCSA: SQL Server 2012/2014 | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]


    quinta-feira, 6 de outubro de 2016 14:03

  • Então, teria que retornar somente o quarto registro Tipo de Situação = 'T' que como está cadastrado.

    19076 ACETONA FARMAX POPY 80 ML ACETONA FARMAX POPY 80 ML 25/08/2016 D
    19076 ACETONA FARMAX POPY 80 ML ACETONA FARMAX POPY 80 ML 25/08/2016 F
    19076 ACETONA FARMAX POPY 80 ML ACETONA FARMAX POPY 80 ML 25/08/2016 I
    19076 ACETONA FARMAX POPY 80 ML ACETONA FARMAX POPY 80 ML 25/08/2016 T

    quinta-feira, 6 de outubro de 2016 14:11
  • Se você possui estes 4 registros e gostaria de retornar apenas os registros que o campo t.tiposittribent = 'T' você precisa realizar um filtro adicional na cláusula WHERE.

    Como existem os registros com os 4 diferentes valores possíveis no agrupamento ele não irá realizar este filtro para você.

    Teste a sua consulta com o código abaixo, por gentileza.

    SELECT DISTINCT p.idproduto,p.descrcomproduto, g.DESCRRESPRODUTO,VARCHAR_FORMAT(g.DTULTIMAALTERACAO, 'dd/MM/yyyy') AS DATA,
    t.tiposittribent AS TP_SIT, g.ncm,g.codcest
    FROM PRODUTO P, PRODUTO_GRADE G, PRODUTO_TRIBUTACAO_ESTADO T
    WHERE p.idproduto=g.idproduto
    AND p.descrcomproduto like 'ACETONA%'
    --AND g.DTULTIMAALTERACAO > '15.10.2015'
    AND t.uf='MS'
    AND g.flaginativo='F'
    AND t.tiposittribent = 'T'
    GROUP BY
    p.idproduto,
    p.descrcomproduto,
    g.DESCRRESPRODUTO,
    g.DTULTIMAALTERACAO,
    t.tiposittribent,
    g.ncm,g.codcest


    Felipe Lauffer
    MCT | MCSE: Data Management & Analytics | MCSE: Data Platform | MCSA: SQL Server 2012/2014 | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]


    quinta-feira, 6 de outubro de 2016 14:15
  • Mas aí é que tá o problema. Não existe quatro registros, somente o que está cadastrado como "T". O que existe no sistema é uma opção COMBO para se cadastrar qualquer uma das opções. 
    quinta-feira, 6 de outubro de 2016 14:19
  • Me confirma se existem registros na tabela PRODUTO_TRIBUTACAO_ESTADO com o campo tiposittribent diferente de 'T', por gentileza.

    Felipe Lauffer
    MCT | MCSE: Data Management & Analytics | MCSE: Data Platform | MCSA: SQL Server 2012/2014 | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]


    quinta-feira, 6 de outubro de 2016 14:23
  • Existem outros registros sim, mas esse que 19076 é somente 'T'.
    quinta-feira, 6 de outubro de 2016 14:28
  • Na verdade o que essa query tá fazendo é puxar todas as opções que já está no COMBO, que são D de Diferido, T de tributado I de Isento e F de Sub Tributária. Quando na realidade só está cadastrado a opção T.

    quinta-feira, 6 de outubro de 2016 14:32
  • José,

    Está faltando realizar uma junção com a tabela PRODUTO_TRIBUTACAO_ESTADO.

    Como você não está realizando nenhuma junção nesta tabela provavelmente está sendo gerado um plano cartesiano e aparecendo todos os valores (T, F, I e D).

    Favor consultar o material abaixo sobre junção (JOIN):

    http://www.devmedia.com.br/clausulas-inner-join-left-join-e-right-join-associacao-de-tabelas-sql-server-2008-parte-2/18930


    Felipe Lauffer
    MCT | MCSE: Data Management & Analytics | MCSE: Data Platform | MCSA: SQL Server 2012/2014 | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]


    quinta-feira, 6 de outubro de 2016 14:34
  • Verdade, verdadeira. Passou despercebido isso. Muito obrigado pela ajuda. 
    quinta-feira, 6 de outubro de 2016 14:49