Am un tabel cu valori tipice, cum ar fi: de identificare, numărul de telefon, nume de persoane etc. În acest tabel, dacă o persoană are mai mult de un număr de telefon la care persoana va apărea de mai multe ori, fiecare iterație cu un alt număr de telefon corespunzătoare pentru acea persoană.
Scopul meu este de a scrie un cursor care se va adăuga toate diferite telefoane în care o persoană are într-un singur telefon de valoare într-un tabel nou, fiecare dintre ele separate prin ', '. În acest fel, fiecare persoană va apărea o singură dată în tabel, dar numerele de telefon pe valoarea va fi al numărul de telefon pe care persoana deține separate prin ','.
Am venit cu ceva de genul asta:
Aici am crea "normalizat" tabel care persoanele informații ar trebui să fie introduce:
CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))
Acesta este un tabel temporar pentru a selecta persoanele de IDENTITATE care se repetă de mai multe ori, ceea ce înseamnă că are mai multe numere de telefon (Telefonos_General este masa sunt obtinerea de date de la).
SELECT Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING COUNT(1) >1
Aici declar variabilele utilizate în cursorului:
DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)
Apoi declară cursorul în sine:
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
Începe cursorul:
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
Aceasta este o buclă în timp ce se întoarce @Prev_Telefono ca nul atunci când aceasta ar trebui să fie (@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
Aici am doar închide cursorul:
END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos
Stie cineva de ce mi buclă în timp ce este inserarea nul pe noile telefoane masă când ar trebui să fie adăugarea de o listă de numere de telefon de acea persoană?
Mulțumesc mult pentru atenție!!