Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DZnedin

[Resolvido] duplicidade de ID com dados Diferentes

Recommended Posts

Bom Dia

 

Preciso de uma ajuda para oraganizar a base de dados de um cliente

 

meu caso é o seguinte.......tenho uma base de dados onde uso o cnpj como ID

nesta base existem alguns ID´s duplicados mas com numeros de telefones diferentes, gostaria de deixa-los em uma linha só

EX.

 

ID	        CLIENTE	        DDD	TEL						
00111222000184	JOSE LTDA	11	30305566						
00111222000184	JOSE LTDA	11	30306677						
00333444000156	LULU LTDA	11	50507788						
00333444000156	LULU LTDA	11	50517789						
00333444000156	LULU LTDA	11	50528977						
00333444000156	LULU LTDA	11	50553565						
									
EX.									
ID	        CLIENTE	        DDD	TEL	        DDD2	TEL2	        DDD3	TEL3	        DDD4	TEL4
00111222000184	JOSE LTDA	11	30305566	11	30306677				
00333444000156	LULU LTDA	11	50507788	11	50517789	11	50528977	11	50553565

O meu problema fica pior ainda quando alguns clientes tem até quatro numeros de telefone em linhas diferentes

 

Qualquer ajuda é bem vinda

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

DZnedin, beleza?

 

Se for SQL2005 ou SQL2008 tem a função PIVOT que te ajuda a organizar as informações....

Se for SQL2000 tem um tutorial do eriva_br: http://forum.imasters.com.br/index.php?/topic/224865-transformando-varias-linhas-em-uma-so-coluna/

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Junior

 

Obrigado pela rapidez na resposta

 

Estou utilizando o SQL Server 2008

 

Estive olhando alguns tópicos sobre o comando PIVOT e vi que é necessário que eu conheça ou saiba todos os clientes ou ID´s para poder agrupá-los o que no meu caso não consigo, pois tenho mais de 10.000 clientes nesta tabela

 

Caso eu esteja enganado por favor me ajude

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta fazer como no SQL2000..... eu resolvi um problema parecido a pouco utilizando o eskema do eriva_br....

 

ps: cuidado com a performance em cursores :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal resolvi da seguinte forma

 

Primeiramente, pra descobrir qual o máximo de colunas de telefone (ddd1, telefone1, ddd2, telefone2, etc) que sua tabela nova irá precisar executar a query abaixo para saber quantas vezes cada cliente aparece na tabela antiga:

 

select id, cliente, COUNT(*) from #temp group by ID, CLIENTE having COUNT(*) > 1

 

Onde a 3a coluna retorna a quantidade máxima que cada cliente apareceu. No exemplo acima, o numero maximo é 4, então nossa tabela #tempNova terá quatro colunas para DDD e Telefone respectivamente.

 

Depois disso, executar a sequencia abaixo:

 

1 - insere o primeiro telefone de cada cliente na tabela #tempNova

 

INSERT INTO #tempNova

( ID, CLIENTE, DDD1, TEL1 )

 

SELECT T1.ID, T1.CLIENTE, T1.DDD, T1.TEL

FROM (

SELECT ID, CLIENTE, DDD, TEL, ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY TEL ASC) AS rId

FROM #temp

) T1

WHERE T1.rId = 1

 

2 - atualiza a tabela #tempNova com o 2o telefone de cada cliente

 

UPDATE #tempNova

SET DDD2 = T1.DDD, TEL2 = T1.TEL

FROM #tempNova TF

LEFT JOIN (

SELECT ID, CLIENTE, DDD, TEL, ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY TEL ASC) AS rId

FROM #temp

) T1

ON TF.ID = T1.ID

WHERE T1.rId = 2

 

3 - atualiza a tabela #tempNova com o 3o telefone de cada cliente

 

UPDATE #tempNova

SET DDD3 = T1.DDD, TEL3 = T1.TEL

FROM #tempNova TF

LEFT JOIN (

SELECT ID, CLIENTE, DDD, TEL, ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY TEL ASC) AS rId

FROM #temp

) T1

ON TF.ID = T1.ID

WHERE T1.rId = 3

 

 

4 - atualiza a tabela #tempNova com o 4o telefone de cada cliente

 

UPDATE #tempNova

SET DDD4 = T1.DDD, TEL4 = T1.TEL

FROM #tempNova TF

LEFT JOIN (

SELECT ID, CLIENTE, DDD, TEL, ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY TEL ASC) AS rId

FROM #temp

) T1

ON TF.ID = T1.ID

WHERE T1.rId = 4

 

espero q ajude a outros que precisarem

 

um abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.