Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Repetidos em uma coluna


Jair Perrut

Pergunta

Tenho uma tabela com as datas de aniversários de clientes, resumindo ela é assim...

tabela ANIVERSARIANTES com colunas 'nome vendedor', 'nome cliente', 'data nascimento'

Quero excluir os valores duplicados com referência apena na coluna 'nome cliente', pois existem linhas com cliente duplicado porem com vendedores diferentes, e não importa qual vendedor fique.

ex:

NOME VENDEDOR | NOME CLIENTE | DATA NASC

João | André | 09/03/1980

João | Carla | 12/09/1985

Maria | Carla | 12/09/1985

Maria | José | 20/11/1960

Nesse exemplo a CARLA já comprou com o JOÃO e também com a MARIA.

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Jair,

Esta tabela possui chave primária?

Se tiver poderá dar um "select NOME VENDEDOR, count(NOME CLIENTE) ... group by NOME VENDEDOR having count(NOME CLIENTE)>1" e pegar o primeiro registro de cada vendedor. Após o select, pegue a PK e a utilize para deletar os registros. Isto funcionará apenas se os dados estiverem duplicados. Se estiverem triplicados, basta executar o processo novamente.

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde Jair,

Esta tabela possui chave primária?

Se tiver poderá dar um "select NOME VENDEDOR, count(NOME CLIENTE) ... group by NOME VENDEDOR having count(NOME CLIENTE)>1" e pegar o primeiro registro de cada vendedor. Após o select, pegue a PK e a utilize para deletar os registros. Isto funcionará apenas se os dados estiverem duplicados. Se estiverem triplicados, basta executar o processo novamente.

Fulvio, obrigado pela dica

se puder me dar mais detalhes do procedimento pois sou leigo no assunto

Estou usando essa query no excel 2010, tentei incluir o que você disse mas deu erro...

até então minha query esta assim (sem a sua dica)

SELECT DISTINCT SL1010.L1_FILIAL AS 'LOJA', SL1010.L1_VEND AS 'COD. VEND.', SA3010.A3_NOME AS 'NOME VEND.', SA1010.A1_NOME AS 'NOME CLIENTE', SA1010.A1_TEL AS 'CONT. 1', SA1010.A1_XCEL AS 'CONT. 2', CONVERT(datetime,SA1010.A1_ULTCOM,103) AS 'ULT. COMP.', CONVERT(datetime,SA1010.A1_DTNASC,103) AS 'DATA NASC.'

FROM ****.***.SA1010 SA1010, ****.***.SA3010 SA3010, ****.***.SL1010 SL1010

WHERE SA3010.A3_COD = SL1010.L1_VEND AND SA1010.A1_COD = SL1010.L1_CLIENTE AND ((SL1010.L1_FILIAL=?) AND (SUBSTRING(A1_DTNASC,5,8) Between ? And ?))

ORDER BY 'NOME VEND.'

Estou usando o DISTINCT para já descartar os dados em que todas as colunas são iguais

Sobre a PK tem uma coluna no BD que é o Código da Venda, não estou usando nesta consulta mas se necessário eu incluo...

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

já aproveitando o espaço e sua ajuda, se possivel me dizer também como faço para ordenar os dados pela data e mês, desconsiderando o ano

Ex:

DATA NASC

13/03/1980

13/03/1992

13/03/1993

14/03/1988

14/03/1950

15/03/1955

Editado por Jair Perrut
Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Jair,

De nada... coloquei um exemplo logo abaixo com os dados que postou acima. Rode os scripts de exemplo e depois é só adaptar... rs. Tem também a ordenação por mês, ok?

-- criando a tabela temporária
create table #Tabela (Id int identity, NOME_VENDEDOR VARCHAR(10), NOME_CLIENTE VARCHAR(10), DATA_NASC DATETIME)

-- inserindo os dados
INSERT INTO #tabela VALUES ('João' , 'André' , '1980-03-09')
INSERT INTO #tabela VALUES ('João' , 'Carla' , '1985-09-12')
INSERT INTO #tabela VALUES ('Maria' , 'Carla' , '1985-09-12')
INSERT INTO #tabela VALUES ('Maria' , 'José' , '1960-11-20')

-- verificando os dados inseridos
SELECT * FROM #Tabela

-- select para ordenar pelo mês
SELECT * FROM #Tabela ORDER BY (MONTH(DATA_NASC))

-- pegando os dados DUPLICADOS
select min(id), NOME_VENDEDOR, count(NOME_CLIENTE) FROM #Tabela group by NOME_VENDEDOR having count(NOME_CLIENTE)>1

-- pegando o select acima, tirando os campos que não precisa e deixando apenas o campo PK
DELETE FROM #Tabela WHERE id in (select min(id) FROM #Tabela group by NOME_VENDEDOR having count(NOME_CLIENTE)>1)

-- verificando os dados excluidos
SELECT * FROM #Tabela

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde Jair,

De nada... coloquei um exemplo logo abaixo com os dados que postou acima. Rode os scripts de exemplo e depois é só adaptar... rs. Tem também a ordenação por mês, ok?

-- criando a tabela temporária
create table #Tabela (Id int identity, NOME_VENDEDOR VARCHAR(10), NOME_CLIENTE VARCHAR(10), DATA_NASC DATETIME)

-- inserindo os dados
INSERT INTO #tabela VALUES ('João' , 'André' , '1980-03-09')
INSERT INTO #tabela VALUES ('João' , 'Carla' , '1985-09-12')
INSERT INTO #tabela VALUES ('Maria' , 'Carla' , '1985-09-12')
INSERT INTO #tabela VALUES ('Maria' , 'José' , '1960-11-20')

-- verificando os dados inseridos
SELECT * FROM #Tabela

-- select para ordenar pelo mês
SELECT * FROM #Tabela ORDER BY (MONTH(DATA_NASC))

-- pegando os dados DUPLICADOS
select min(id), NOME_VENDEDOR, count(NOME_CLIENTE) FROM #Tabela group by NOME_VENDEDOR having count(NOME_CLIENTE)>1

-- pegando o select acima, tirando os campos que não precisa e deixando apenas o campo PK
DELETE FROM #Tabela WHERE id in (select min(id) FROM #Tabela group by NOME_VENDEDOR having count(NOME_CLIENTE)>1)

-- verificando os dados excluidos
SELECT * FROM #Tabela

Ok ainda não tive tempo de testar, vou ver se consigo hoje e já coloco uma resposta

Obrigado novamente

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Jair,

Desta forma, os dados serão excluidos da base de dados!! Quando postou, disse que queria "excluir os valores duplicados". Desta forma implementei com o delete.

Utilizando o exemplo com a temporária que postei acima, ficaria desta forma (desta forma filtrará o resultado):

select NOME_VENDEDOR FROM #Tabela group by NOME_VENDEDOR

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia Jair,

Desta forma, os dados serão excluidos da base de dados!! Quando postou, disse que queria "excluir os valores duplicados". Desta forma implementei com o delete.

Utilizando o exemplo com a temporária que postei acima, ficaria desta forma (desta forma filtrará o resultado):

select NOME_VENDEDOR FROM #Tabela group by NOME_VENDEDOR

Desculpa a demora, fiquei fora um tempo...

Fiz as querys com a tabela de exemplo, porém não é o que estou querendo.

Nesse ultimo código que você me passou vai mostrar somente vendedores sem repetições, mas eu também quero que as outras colunas apareçam

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Jair,

Dá uma olhada agora:

-- criando a tabela temporária
create table #Tabela (Id int identity, NOME_VENDEDOR VARCHAR(10), NOME_CLIENTE VARCHAR(10), DATA_NASC DATETIME)

-- inserindo os dados
INSERT INTO #tabela VALUES ('João' , 'André' , '1980-03-09')
INSERT INTO #tabela VALUES ('João' , 'Carla' , '1985-09-12')
INSERT INTO #tabela VALUES ('Maria' , 'Carla' , '1985-09-12')
INSERT INTO #tabela VALUES ('Maria' , 'José' , '1960-11-20')

-- resultado que deseja
SELECT * FROM #Tabela WHERE id IN (select max(id) FROM #Tabela group by NOME_VENDEDOR)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...