Mám tabulku s typickými hodnotami, jako jsou: identifikace, telefonní číslo, jméno osoby atd. V této tabulce, pokud má člověk více než jedno telefonní číslo, které člověk objeví vícekrát, každé iteraci se jiné telefonní číslo, odpovídající této osobě.
Mým cílem je napsat kurzor, který bude přidat všechny různé telefony má člověk v jednom telefonu hodnotu v nové tabulky, každý z nich odděleny",". V tom, že způsob, jak každý člověk se objeví pouze jednou v tabulce, ale telefonní čísla, hodnotu bude mít al telefonní číslo, které osoba vlastní oddělené ','.
Přišel jsem s něčím, jako je tento:
Tady jsem se vytvořit "normalizované" stolu, že osoby, které informace by měly být vložit:
CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))
Jedná se o dočasné tabulky vyberte osoby ID, že se opakuje několikrát, což znamená, že má více telefonních čísel (Telefonos_General je stůl jsem dostat data z).
SELECT Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING COUNT(1) >1
Zde prohlašuji, že proměnné použité v kurzoru:
DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)
Pak deklarovat 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
Start 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
To je while, který se vrací @Prev_Telefono jako null, když by to mělo být (@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
Tady jsem jen v blízkosti kurzoru:
END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos
Někdo ví, proč je můj, zatímco smyčka je vkládání null na nové telefony stolu, když by to mělo být přidání seznamu telefonní čísla, která člověk?
Díky moc za vaši pozornost!!