sin cursores y con querys dinamicos :)
Código SQL:
Ver originalCREATE TABLE #temp(
rut INT,
fono INT
)
INSERT INTO #temp VALUES (123,25632)
INSERT INTO #temp VALUES (123,25874)
INSERT INTO #temp VALUES (123,22222)
INSERT INTO #temp VALUES (123,11111)
INSERT INTO #temp VALUES (123,33333)
INSERT INTO #temp VALUES (123,55555)
INSERT INTO #temp VALUES (123,66666)
INSERT INTO #temp VALUES (123,77777)
INSERT INTO #temp VALUES (123,88888)
INSERT INTO #temp VALUES (254,1254)
INSERT INTO #temp VALUES (586,1257)
DECLARE @TABLE nvarchar(MAX)
DECLARE @x INT
DECLARE @y INT
DECLARE @query nvarchar(MAX)
DECLARE @fono INT
DECLARE @rut INT
DECLARE @z INT
SELECT @x=MAX(total) FROM(
SELECT COUNT(rut) total FROM #temp GROUP BY rut
) t1
SET @y=1
SET @TABLE='create table ##temp2 (rut int,'
while @y<=@x
BEGIN
IF @y=@x
SET @TABLE=@TABLE + 'fono' + CONVERT(VARCHAR(10),@y) + ' int)'
ELSE
SET @TABLE=@TABLE + 'fono' + CONVERT(VARCHAR(10),@y) + ' int,'
SET @y=@y+1
END
EXECUTE sp_executesql @TABLE
SELECT rut,IDENTITY(INT,1,1) rn INTO #temp3 FROM #temp GROUP BY rut
SET @x=1
while @x<=(SELECT COUNT(*) FROM #temp3)
BEGIN
SELECT @rut=rut FROM #temp3 WHERE rn=@x
SET @y=1
SET @z=1
SET @query='insert into ##temp2 (rut,'
SELECT fono,IDENTITY(INT,1,1) rn INTO #temp4 FROM #temp WHERE rut=@rut
while @z<=(SELECT COUNT(*) FROM #temp WHERE rut=@rut)
BEGIN
IF @z=(SELECT COUNT(*) FROM #temp WHERE rut=@rut)
SET @query=@query + 'fono' + CONVERT(VARCHAR(10),@z) + ')'
ELSE
SET @query=@query + 'fono' + CONVERT(VARCHAR(10),@z) + ','
SET @z=@z+1
END
SET @query=@query + ' values (' + CONVERT(VARCHAR(10),@rut) + ','
print @query
while @y<=(SELECT COUNT(*) FROM #temp WHERE rut=@rut)
BEGIN
IF @y=(SELECT COUNT(*) FROM #temp WHERE rut=@rut)
SET @query=@query + CONVERT(VARCHAR(10),(SELECT fono FROM #temp4 WHERE rn=@y)) + ')'
ELSE
SET @query=@query + CONVERT(VARCHAR(10),(SELECT fono FROM #temp4 WHERE rn=@y)) + ','
SET @y=@y+1
END
DROP TABLE #temp4
EXECUTE sp_executesql @query
SET @x=@x+1
END
SELECT * FROM ##temp2
DROP TABLE ##temp2
DROP TABLE #temp3
--drop table #temp4