J'ai un tableau avec des valeurs typiques comme: l'identification, numéro de téléphone, nom des personnes etc. Dans ce tableau, si une personne a plus d'un numéro de téléphone de cette personne apparaît plusieurs fois, à chaque itération avec un autre numéro de téléphone correspondant à cette personne.
Mon but est d'écrire un curseur qui va ajouter tous les téléphones différents d'une personne a un numéro de téléphone unique valeur dans une nouvelle table, chacun d'entre eux séparés par des ', '. De cette façon, chaque personne qu'une seule fois dans la table, mais les numéros de téléphone de la valeur de al le numéro de téléphone que la personne possède séparés par des ','.
Je suis venu avec quelque chose comme ceci:
Ici, j'ai créer le "normalisé" de la table que les personnes info doit être insérer:
CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))
C'est une table temporaire pour sélectionner les personnes dont l'ID est répété plusieurs fois, le sens qu'il a plusieurs numéros de téléphone (Telefonos_General est la table, je reçois les données).
SELECT Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING COUNT(1) >1
Ici, je déclare les variables utilisées dans le curseur:
DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)
Ensuite déclarer le curseur lui-même:
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
Démarrer le curseur:
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
C'est la boucle while qui est de retour @Prev_Telefono nulle alors qu'elle devrait être l' (@Originaux+ ', ' + @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
Ici, je viens de fermer le curseur:
END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos
Quelqu'un sait pourquoi ma boucle while est d'insérer la valeur null sur les nouveaux téléphones de la table alors qu'elle devrait être l'ajout d'une liste de numéros de téléphone de cette personne?
Merci beaucoup pour votre attention!!