Ho una tabella con i valori tipici come: identificazione, numero di telefono, nome delle persone etc. In questa tabella se una persona ha più di un numero di telefono che la persona sarà visualizzato più volte, ogni iterazione con un diverso numero di telefono corrispondente a quella persona.
Il mio obiettivo è quello di scrivere un cursore che si andranno ad aggiungere tutti i telefoni diversi che una persona ha in un telefono unico valore in una nuova tabella, ognuno di loro separati da ', '. In questo modo ogni persona potrà apparire solo una volta in tavola, ma i numeri di telefono avrà il valore al numero di telefono che una persona possiede separati da ','.
Devo venire con qualcosa di simile a questo:
Qui ho creato il "normalizzato" tabella persone informazioni devono essere inserite:
CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))
Questa è una tabella temporanea per selezionare persone ID che viene ripetuta più volte, il che significa che ha più numeri di telefono (Telefonos_General è la tabella che sto ottenendo i dati).
SELECT Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING COUNT(1) >1
Qui dichiaro le variabili utilizzate nel cursore:
DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)
Quindi dichiarare il cursore stesso:
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
Avviare il cursore:
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
Questo è il ciclo while che sta tornando @Prev_Telefono come null quando invece dovrebbe essere (@Themer+ ', ' + @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
Qui mi basta chiudere il cursore:
END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos
Qualcuno sa perché il mio ciclo while è l'inserimento di null sui nuovi telefoni tabella quando dovrebbe essere l'aggiunta di un elenco di numeri di telefono di quella persona?
Grazie molto per la vostra attenzione!!