Tengo una tabla con los valores típicos como: identificación, número de teléfono, nombre de las personas, etc. En esta tabla si una persona tiene más de un número de teléfono de esa persona aparecerá varias veces, en cada iteración con un diferente número de teléfono correspondiente a esa persona.
Mi objetivo es escribir un cursor que va a agregar todos los teléfonos que tiene una persona en un teléfono único de valor en una nueva tabla, cada uno de ellos separados por ', '. De esa manera cada persona sólo aparecen una vez en la mesa, pero los números de teléfono valor al número de teléfono de esa persona posee separados por ','.
He venido con algo como esto:
Aquí creo que el "normalizado" de la tabla que las personas que información se debe insertar:
CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))
Esta es una tabla temporal para seleccionar a las personas de IDENTIFICACIÓN que se repite varias veces, lo que significa que tiene varios números de teléfono (Telefonos_General es la tabla que estoy recibiendo los datos de).
SELECT Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING COUNT(1) >1
Aquí declaro las variables utilizadas en el cursor:
DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)
Luego de declarar el cursor en sí:
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 el 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 es el bucle while, que se está volviendo @Prev_Telefono como null cuando debería ser al (@Descarga+ ', ' + @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
Aquí acabo de cerrar el cursor:
END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos
Alguien sabe por qué mi bucle while es la inserción de un valor nulo en los nuevos teléfonos de la tabla cuando se debe de agregar una lista de números de teléfono de esa persona?
Muchas gracias por su atención!!