Eu tenho uma tabela com os valores típicos como: identificação, número de telefone, nome de pessoas, etc. Nesta tabela, se uma pessoa tiver mais de um número de telefone da pessoa vai aparecer várias vezes, a cada iteração, com um número de telefone diferente correspondente a essa pessoa.
Meu objetivo é escrever um cursor que irá adicionar todos os telefones de uma pessoa tem em um único telefone valor em uma nova tabela, cada um deles separados por ', '. Dessa forma, cada pessoa vai aparecer apenas uma vez na tabela, mas o números de telefone de valor terão al o número de telefone que a pessoa possui separados por ','.
Eu vim com algo como isto:
Aqui eu criar o "normalizado" tabela de que as pessoas que informações devem ser insira:
CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))
Esta é uma tabela temporária para selecionar pessoas de IDENTIFICAÇÃO, que é repetido várias vezes, o que significa que tem vários números de telefone (Telefonos_General é a mesa que eu estou ficando dados).
SELECT Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING COUNT(1) >1
Aqui eu declarar as variáveis utilizadas no cursor:
DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)
Em seguida, declarar o cursor em si:
DECLARE cursor_telefonos CURSOR FOR
SELECT TOP (100) Cedula, cantidad_repetidos, Telefono_v1
FROM #DatosRepetidosTemp
JOIN Telefonos_General on Cedula_v1 = Cedula
WHERE Cedula is not null
Iniciar o cursor:
OPEN cursor_telefonos
FETCH NEXT FROM cursor_telefonos
INTO @Cedula, @Cuenta, @Prev_Telefono
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Telefonos = NULL
SET @Telefonos = @Prev_Telefono
ELSE
Este é o loop while que está retornando @Prev_Telefono como null quando deveria ser o (@Telefonos+ ', ' + @Prev_Telefono).
WHILE @Cuenta != 0
BEGIN
SET @Telefonos = @Telefonos+ ', ' + @Prev_Telefono
SET @Prev_Telefono = @Telefonos
SET @Cuenta = @Cuenta - 1
END
INSERT IGNORE INTO Telefono_General_V2 (Cedula_v2, Cantidad, Telefono_v2)
VALUES (@Cedula, @Cuenta, @Telefonos)
FETCH NEXT FROM cursor_telefonos INTO @Cedula, @Cuenta, @Telefonos
Aqui eu só fechar o cursor:
END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos
Alguém sabe por que o meu while é inserir null em que os novos telefones de mesa quando deve ser a adição de uma lista de números de telefone dessa pessoa?
Muito obrigado pela sua atenção!!