Mám tabuľku s typickými hodnotami ako: identifikácia, telefónne číslo, meno osoby atď. V tejto tabuľke a ak osoba, ktorá má viac než jedno telefónne číslo, ktoré osoby sa objaví viackrát, každá iterácia s rôznymi telefónne číslo, zodpovedajúce tejto osobe.
Môj cieľ je písať kurzor, že bude pridávať na všetky jednotlivé telefóny sa osoba, ktorá má v jednom telefóne hodnota v novej tabuľke, každá z nich oddelené ', '. Týmto spôsobom každý človek sa bude zobrazovať iba raz v tabuľke, ale telefónne čísla hodnotu bude mať al telefónne číslo, ktoré človek vlastní oddelené ','.
Ja som prišiel s niečím, ako je tento:
Tu som sa vytvoriť "normalizovaná" tabuľka, že osoby, ktoré informácie by mali byť vložiť:
CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))
Toto je dočasná tabuľka na výber osôb, ID, ktoré sa opakujú viackrát, čo znamená, že má viac telefónnych čísel (Telefonos_General je tabuľka som získanie dát z).
SELECT Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING COUNT(1) >1
Tu som deklarovať premenné použité v kurzor:
DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)
Potom vyhlásiť kurzor sám:
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
Štart kurzor:
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
Toto je zároveň slučka, ktorá sa vracia @Prev_Telefono ako null, keď by to malo byť (@Náklady+ ', ' + @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
Tu som len blízkosti kurzora:
END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos
Niekto vie, prečo my, zatiaľ čo slučky je vkladanie null na nové telefóny, tabuľky, keď by to malo byť pridaním zoznam telefónne čísla, ktoré človek?
Ďakujeme za vašu pozornosť!!