Usuário com melhor resposta
Top com distinct

Pergunta
-
Galera preciso fazer uma query que faça um select distinct nome . mas que traga os outros dados..
vamos la..
tenho minha tabela empresa
nome | endereco
jao | rua 1
maria | rua 3
jao | rua 2preciso fazer um distinct no nome sómente ... a condicao dele vai ser
selecionar distinct nome .resultado:
nome | endereco
jao | rua 1
maria | rua 3ele precisa fazer distinct no nome mas tambem trazer os outros campos... no meu caso eu tbm uso um Top (20) que faz Newid() no order by .
locura que deu errado Select distinct (nome) top 20 ....
desde ja agradecido qualquer coisa entro com mais detalhes ;d
Respostas
-
segue um exemplo usando row_number com cte
declare @table table(nome varchar(15), endereco varchar(15)) insert into @table values('jao','Rua1') insert into @table values('maria','Rua3') insert into @table values('jao','Rua2') ;with cte_Dados as ( select nome, endereco, row_number() over (PARTITIOn by nome order by nome,endereco) as 'contador' from @table ) select nome, endereco from cte_Dados where contador=1
att.
Marcelo FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Sugerido como Resposta Raul Santos Neto segunda-feira, 31 de janeiro de 2011 16:11
- Marcado como Resposta Jeferson Medeiros segunda-feira, 31 de janeiro de 2011 20:14
-
teste assim
;with cte_dados as ( SELECT id, NomeF, pchave, tipo_endereco, Endereco, Numero, Bairro, Cidade, seguimento, segmento1, segmento2, telefone1, telefone2, Associado, logo1, logo2, logo3, logo4, obs, mapa, Cep, Email, site, logo, Video, Datadecadastro, RazaoSocial, Complemento, Responsavel, datadenascimentoR, CnpjCpf, RG, datatermino, valorcontrato, Observacao , row_number() over (PARTITIOn by NomeF order by NomeF,NEWID()) as 'contador' FROM Empresa WHERE (Associado = @Ouro) OR (Associado = @Prata) OR (Associado = @Bronze) ) select top 20 * from cte_dados where contador=1
att.
Marcelo FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Marcado como Resposta Jeferson Medeiros segunda-feira, 31 de janeiro de 2011 20:13
Todas as Respostas
-
Jefferson
no seu exemplo jao rua1 é diferente de jao rua2, por isto o camando traz os 2... vc escolhei i jao rua1, existe algum critério para ser o rua1? e qual a versão de seu sql? se for 2005 ou 2008 vc pode usar o row_count
att.
Marcelo FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba -
segue um exemplo usando row_number com cte
declare @table table(nome varchar(15), endereco varchar(15)) insert into @table values('jao','Rua1') insert into @table values('maria','Rua3') insert into @table values('jao','Rua2') ;with cte_Dados as ( select nome, endereco, row_number() over (PARTITIOn by nome order by nome,endereco) as 'contador' from @table ) select nome, endereco from cte_Dados where contador=1
att.
Marcelo FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Sugerido como Resposta Raul Santos Neto segunda-feira, 31 de janeiro de 2011 16:11
- Marcado como Resposta Jeferson Medeiros segunda-feira, 31 de janeiro de 2011 20:14
-
extamente o joao rua 1 é diferente do joao rua 2 porem é a mesma empresa em enderecos diferentes..
preciso que ele verifique o nome e se for igual ele escolhe um com o newid()
talvez o row_number funcione mas não tenho muita pratica com ele se puder comentar as linhas eu agradeço.
-
da uma olhada no exemplo que postei...
tente converter apra seu código caso não consiga poste o seu script para que possamos avaliar
OBS. só funciona em SQL Server 2005 e 2008!
Att.
Marcelo FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba -
cara tente mas não sei nem onde infia o row_number ;/
SELECT TOP (20) id, NomeF, pchave, tipo_endereco, Endereco, Numero, Bairro, Cidade, seguimento, segmento1, segmento2, telefone1, telefone2, Associado,
logo1, logo2, logo3, logo4, obs, mapa, Cep, Email, site, logo, Video, Datadecadastro, RazaoSocial, Complemento, Responsavel, datadenascimentoR,
CnpjCpf, RG, datatermino, valorcontrato, Observacao
FROM Empresa
WHERE (Associado = @Ouro) OR
(Associado = @Prata) OR
(Associado = @Bronze)
ORDER BY NEWID()essa é minha query . o campo que deve fazer o tal distinct é o NomeF sómente.
-
teste assim
;with cte_dados as ( SELECT id, NomeF, pchave, tipo_endereco, Endereco, Numero, Bairro, Cidade, seguimento, segmento1, segmento2, telefone1, telefone2, Associado, logo1, logo2, logo3, logo4, obs, mapa, Cep, Email, site, logo, Video, Datadecadastro, RazaoSocial, Complemento, Responsavel, datadenascimentoR, CnpjCpf, RG, datatermino, valorcontrato, Observacao , row_number() over (PARTITIOn by NomeF order by NomeF,NEWID()) as 'contador' FROM Empresa WHERE (Associado = @Ouro) OR (Associado = @Prata) OR (Associado = @Bronze) ) select top 20 * from cte_dados where contador=1
att.
Marcelo FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Marcado como Resposta Jeferson Medeiros segunda-feira, 31 de janeiro de 2011 20:13
-