Mam tabela z typowymi wartościami, takimi jak: numer identyfikacyjny, numer telefonu, imię i nazwisko osoby, itp. W tej tabeli, jeśli człowiek ma więcej niż jeden numer telefonu, osoba ta będzie wyświetlany kilka razy, na każdej iteracji z innym numerem telefonu, odpowiednio tej osobie.
Moim celem jest, aby napisać kursor, który doda wszystkie inne telefony, które mają osobę, w jedną wartość telefonu w nowej tabeli, z których każdy podzielony jest znakiem",". W ten sposób każdy będzie wyświetlane w tabeli tylko jeden raz, ale w znaczeniu numer telefonu będzie podany numer telefonu, którego właścicielem jest ten człowiek, oddzielonych znakiem",".
Przyszedłem coś takiego:
Tutaj tworzę "znormalizowany" tabelę, w którą należy włożyć informacje na temat ważniejszych osobach-nowość:
CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))
To tymczasowa tabela wyboru identyfikatora użytkownika, który powtarza się kilka razy, co oznacza, że jest w niej kilka numerów telefonów (Telefonos_General jest tabela, z której mam dane).
SELECT Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING COUNT(1) >1
Tutaj ogłaszam zmienne wykorzystywane w kursorze:
DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)
Następnie należy zadeklarować sam kursor:
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
Uruchom kursor:
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
Jest to pętla while, która zwraca @Prev_Telefono jak zero, kiedy powinien być (@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
Tutaj po prostu zamykam kursor:
END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos
Czy ktoś wie, dlaczego mój pętli while wstawia zero w tabeli nowych telefonów, kiedy powinien dodawać lista numerów tego człowieka?
Dziękuję bardzo za uwagę!!