我有一个表与典型价值,如:识别、电话号码、人名等等。 在这个表格如果一个人有多个电话号码,人将会出现多次,每一次迭代有不同的电话号码对应的那个人。
我的目标是编写一个标,将增加所有不同的电话一个人有一个单一的电话价值的新表,他们每个人分隔','. 在这样每个人将只出现一次的表格,但是电话号码,价值将有al的电话号码的那人拥有分开由','.
我是来与这样的事情:
我在这里创建"标准化"的表格的人士的信息应插入:
CREATE TABLE IF NOT EXISTS Telefono_General_V2 (Cedula_v2 varchar(50),Nombre_v2 varchar(50),Cantidad int, Telefono_v2 varchar(max))
这是一个临时的表来选择人的身份证多次重复,这意味着它有多个电话号码(Telefonos_General是表我得到的数据)。
SELECT Cedula_v1 AS Cedula, COUNT(1) AS cantidad_repetidos
INTO #DatosRepetidosTemp
FROM Telefonos_General
GROUP BY Cedula_v1
HAVING COUNT(1) >1
在这里我宣布中使用的变量的光标:
DECLARE
@Cedula varchar(50),
@Cuenta int,
@Prev_Telefono varchar(max),
@Telefonos varchar(max)
然后宣布标本身:
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
启动光标:
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
这是同时循环,返回@Prev_Telefono作为空时它应该(@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
在这里,我只是闭上的光标:
END
CLOSE cursor_telefonos
DEALLOCATE cursor_telefonos
有人知道为什么我的同时循环插入空的新手机表时,应该添加一个清单的电话号码的那人?
谢谢你的注意力!!