Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Repetidos em uma coluna


Jair Perrut

Question

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 to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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

Edited by Jair Perrut
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...