none
HAVING (COUNT) - DUPLICAÇÃO RRS feed

  • Pergunta

  • Boa tarde

    Por favor

    estou criando uma consulta e adicionei essa CASE abaixo para descobrir algum item que se duplica.

    ,CASE

     WHEN COUNT (T2.ITEMCODE)> 1 then 'Unico'
     else 'Duplicado'
     End as 'ITEM'

    RESULTADO:

    ItemCode       ItemName                                                ITEM
    0250401 T/W    TAMPA POTE PAOLA (CX C/ 700) W       Unico
    0250401 T/E    TAMPA POTE PAOLA (CX C/ 700) E         Duplicado
    0250401 F/W    POTE PAOLA (CX C/ 700) - W               Unico
    0250401 F/E    POTE PAOLA (CX C/ 700) - E                  Duplicado

    Percebi que a CASE está apenas analisando os números 0250401  e não as letras depois dos números.

    Por favor existe alguma maneira de filtrar todo item ?

    Obrigado

    Reinaldo

    terça-feira, 26 de janeiro de 2016 17:49

Respostas

  • Paranhas,

    Tente utilizar uma coluna adicional no retorno com a cláusula COUNT(*) para verificar quantos registros existem para cada grupo de registros. Se mesmo assim parecer que algo não está correto tire a cláusula GROUP BY para ver todos os registros reais que estão retornando na consulta para tentar descobrir o que há de errado.


    Felipe Lauffer MCSA: SQL Server | MCP

    • Marcado como Resposta Marcos SJ quarta-feira, 27 de janeiro de 2016 19:56
    quarta-feira, 27 de janeiro de 2016 11:14

Todas as Respostas

  • Paranhas,

    Você consegue postar a sua consulta completa, por gentileza?


    Felipe Lauffer MCSA: SQL Server | MCP

    terça-feira, 26 de janeiro de 2016 19:14
  •  

    Opa

    sim, Flauffer

    SELECT T0.CardName,T0.CARDCODE,T2.ItemCode,t2.ItemName

    ,CASE

     WHEN COUNT (T2.ITEMCODE) > 1 then 'Unico'
     else 'Duplicado'
     End as 'ITEM'


    FROM OPOR T0
     INNER JOIN POR1 T1 ON T1.DocEntry=T0.DocEntry
     ----and T1.LineNum =0
     INNER JOIN OITM T2 ON T1.ItemCode=T2.ItemCode
     
     WHERE T0.[CardName]  LIKE '%EMPLAL SUDESTE EMBALAGENS PLASTICAS LTDA%'

    OR  T0.[CardName]  LIKE 'WACO INDUSTRIA E COMERCIO DE EMBALAGENS LTDA-ME'
     
    GROUP BY T0.CardName,T2.ItemCode,T1.Dscription,t2.ItemName,T0.CARDCODE


    order by T2.ItemCode desc

    Obrigado

    Reinaldo

    terça-feira, 26 de janeiro de 2016 19:28
  • Boa tarde,

    Reinaldo, o Count vai ser maior que 1 na sua query se houver mais de uma linha com o mesmo valor nas 5 colunas que você colocou no Group By, sendo que nesse caso essas linhas serão agrupadas em uma só no resultado.

    Acho que para descobrir o que está ocorrendo é melhor você fazer um teste removendo o Case / Count e o Group By para analisar o resultado retornado.

    obs: desconfio que a coluna T1.Dscription não é necessária no Group By

    Espero que ajude


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

    terça-feira, 26 de janeiro de 2016 20:37
  • Bom dia

    Gapimex

    Retirei o CASE e também a coluna T1.Dscription do Group By, antes tinha 48 linhas agora reduziu para 45 linha, conferi via OLHO e não constou duplicidade dos Itens, apenas item que são disponibilizada por vários fornecedores que é valido.

    Fiquei com uma dúvida, utilizei o HAVING COUNT (T2.ITEMCODE) >5  e me trouxe 18 linhas, não existem tanta duplicidade assim da onde ele está olhando ?

    Muito Obrigado.

    quarta-feira, 27 de janeiro de 2016 10:55
  • Paranhas,

    Tente utilizar uma coluna adicional no retorno com a cláusula COUNT(*) para verificar quantos registros existem para cada grupo de registros. Se mesmo assim parecer que algo não está correto tire a cláusula GROUP BY para ver todos os registros reais que estão retornando na consulta para tentar descobrir o que há de errado.


    Felipe Lauffer MCSA: SQL Server | MCP

    • Marcado como Resposta Marcos SJ quarta-feira, 27 de janeiro de 2016 19:56
    quarta-feira, 27 de janeiro de 2016 11:14
  • Paranhas,

    quando você usa o COUNT ele vai contar os registros existentes na sua tabela, se esse registro aparecer mais de uma vez ele vai te da o resultado correto, mesmo que você use o GROUP BY, onde você agrupa vários registros em uma so linha, mas preste atenção eu falei vários. No seu caso o registro 0250401 T/E - TAMPA POTE PAOLA (CX C/ 700) E, aparece como duplicado por que ele tem mais de uma ocorrência na tabela. Abaixo mostro um exemplo que comprovo isso

    create table #tabela (id varchar(50), nome varchar(30))
    
    insert into #tabela values ('0250401 T/E','TAMPA POTE PAOLA (CX C/ 700) E')
    insert into #tabela values ('0250401 T/E','TAMPA POTE PAOLA (CX C/ 700) E')
    insert into #tabela values ('0250401 T/E','TAMPA POTE PAOLA (CX C/ 700) E')
    insert into #tabela values ('0250401 T/W','TAMPA POTE PAOLA (CX C/ 700) W')
    
    SELECT 
    	ID,
    	NOME,
    	(CASE 
    		WHEN COUNT(ID) = 1 THEN 'UNICO'
    		ELSE 'DUPLICADO'
    	 END) AS RESULTADO,
    	 COUNT(ID) AS NUMERO_REGISTRO
    FROM #Tabela
    GROUP BY ID, NOME

    Resultado

    ID                                                 NOME                           RESULTADO NUMERO_REGISTRO

    -------------------------------------------------- ------------------------------ --------- ---------------

    0250401 T/E                                        TAMPA POTE PAOLA (CX C/ 700) E DUPLICADO 3

    0250401 T/W                                        TAMPA POTE PAOLA (CX C/ 700) W UNICO     1

    (2 row(s) affected)

    quarta-feira, 27 de janeiro de 2016 13:57
  • Boa tarde

    Renato

    Muito obrigado, funcionou muito bem.

    Muito Obrigado

    quarta-feira, 27 de janeiro de 2016 18:34
  • Boa tarde

    Flauffer

    Muito Obrigado, utilizei a coluna adicional com a cláusula COUNT(*)  e o obtive o resultado mais lógico.

    Obrigado

    Reinaldo

    quarta-feira, 27 de janeiro de 2016 18:43
  • Maravilha! Disponha!

    Felipe Lauffer MCSA: SQL Server | MCP

    quarta-feira, 27 de janeiro de 2016 18:47
  • PARANHAS,

    Não esqueça de marcar a resposta do usuário que te auxiliou a encontrar a solução sempre. Neste caso eu já marquei, mas na próxima não esqueça de o fazer.

    Obrigado.


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 27 de janeiro de 2016 19:57