Usuário com melhor resposta
Meu having não contou registros duplicados

Pergunta
-
Tenho uma tabela, com dois campos. Tipo e Valor. No campo tipo, tenho valores duplicados, veja a lista
2 5
4 -42
2 2
2 7
3 16
3 20Aí fiz o seguinte select, bem simples.
Select tipo, value, count(tipo) as duplicado
from Tabela group by tipo, value
having count(tipo) > 1
O resultado é nulo. Não mostra nada na saída da query. O que está errado na query? Mudei o count para count(*) e nada também.
Respostas
-
Amigo,
Para obter este resultado que você precisa você deve utilizar CTE.
Segue abaixo um script T-SQL para você adaptar à sua necessidade:
DECLARE @TB_TESTE TABLE ( Tipo int, Valor int ) INSERT INTO @TB_TESTE VALUES (2, 5), (2, 42), (2, 2), (2, 7), (3, 16), (3, 20); --SELECT * FROM @TB_TESTE WITH AGRUPADO AS ( SELECT DUP.Tipo, COUNT(DUP.Tipo) AS DUPLICADO FROM @TB_TESTE AS DUP GROUP BY DUP.Tipo HAVING COUNT(DUP.Tipo) > 1 ) SELECT ORIGEM.Tipo, ORIGEM.Valor, AGRUP.DUPLICADO FROM @TB_TESTE AS ORIGEM INNER JOIN AGRUPADO AS AGRUP ON ORIGEM.Tipo = AGRUP.Tipo GROUP BY ORIGEM.Tipo, ORIGEM.Valor, AGRUP.DUPLICADO GO
Para maiores informações veja:
https://msdn.microsoft.com/pt-br/library/ms175972%28v=sql.120%29.aspx
https://technet.microsoft.com/pt-br/library/ms190766(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Mr. Morello quinta-feira, 2 de julho de 2015 14:25
- Marcado como Resposta Matheus L. M. C. Campos sexta-feira, 3 de julho de 2015 18:45
Todas as Respostas
-
-
Amigo,
Para obter este resultado que você precisa você deve utilizar CTE.
Segue abaixo um script T-SQL para você adaptar à sua necessidade:
DECLARE @TB_TESTE TABLE ( Tipo int, Valor int ) INSERT INTO @TB_TESTE VALUES (2, 5), (2, 42), (2, 2), (2, 7), (3, 16), (3, 20); --SELECT * FROM @TB_TESTE WITH AGRUPADO AS ( SELECT DUP.Tipo, COUNT(DUP.Tipo) AS DUPLICADO FROM @TB_TESTE AS DUP GROUP BY DUP.Tipo HAVING COUNT(DUP.Tipo) > 1 ) SELECT ORIGEM.Tipo, ORIGEM.Valor, AGRUP.DUPLICADO FROM @TB_TESTE AS ORIGEM INNER JOIN AGRUPADO AS AGRUP ON ORIGEM.Tipo = AGRUP.Tipo GROUP BY ORIGEM.Tipo, ORIGEM.Valor, AGRUP.DUPLICADO GO
Para maiores informações veja:
https://msdn.microsoft.com/pt-br/library/ms175972%28v=sql.120%29.aspx
https://technet.microsoft.com/pt-br/library/ms190766(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Mr. Morello quinta-feira, 2 de julho de 2015 14:25
- Marcado como Resposta Matheus L. M. C. Campos sexta-feira, 3 de julho de 2015 18:45
-
Boa tarde,
Segue outra sugestão para teste:
with CTE_Count as ( select Tipo, Value, COUNT(*) OVER(PARTITION BY Tipo) as Duplicado from Tabela ) select * from CTE_Count where Duplicado > 1
Espero que seja útil.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 3 de julho de 2015 23:12