Que tal.
Siguiendo lo que nos dice Andres, podemos probar lo siguiente:
Para lo cual hay que cambiar las siguientes líneas:
Código:
...
--Le agregamos un campo idenity para identificar cada rgistro.
CREATE TABLE #PIVOT ( IdRow integer IDENTITY(1,1) , Pivote varCHAR (6000))
....
SET @STRG=@STRG+ 'INSERT INTO #PIVOT (Pivote ) SELECT DISTINCT ''' +','+@CALCULO + ' (CASE WHEN ' + @PIVOT +' = '''''' + RTRIM(CAST(' + @PIVOT + ' AS VARCHAR(200))) +'''''' THEN ' + @CAMPO + ' ELSE 0 END) AS '+ ''''''' + RTRIM(CAST(' + @PIVOT + ' AS VARCHAR(200))) +'''''''' FROM ' + TABLA + ' WHERE ' + @PIVOT + ' IS NOT NULL ORDER BY ' + @PIVOT + ' DESC '
EXECUTE (@STRG)
--otrra insercion de otro pivot en este caso los totales en $, es decir si genero 20 columnas se generan otras 20 columnas con el dato de $
SET @STRG= 'INSERT INTO #PIVOT (Pivote , PivoteName) SELECT DISTINCT ''' +','+@CALCULO + ' (CASE WHEN ' + @PIVOT +' = '''''' + RTRIM(CAST(' + @PIVOT + ' AS VARCHAR(200))) +'''''' THEN ' + @CAMPO2 + ' ELSE 0 END) AS '+'''''$ ''+'''' + RTRIM(CAST(' + @PIVOT + ' AS VARCHAR(200))) +'''''''' FROM ' + TABLA + ' WHERE ' + @PIVOT + ' IS NOT NULL ORDER BY ' + @PIVOT + ' DESC 'EXECUTE (@STRG)
.....
....
--Partimos la cadena SQL en dos secciones.
DECLARE @intTotRegs int
DECLARE @intnumRegs int
SELETECT @intTotRegs = Count(*) FROM #PIVOTE
SET @intnumRegs = @intTotRegs / 2
SET @SQL_1 ='SELECT ' + @AGRUPACION
SET @SQL_2 = ''
SELECT @SQL_2= @SQL_2 + RTRIM(convert(varchar(500), PIVOT))
FROM #PIVOT
WHERE IdRow <= @intnumRegs
SET @SQL_3 = ''
SELECT @SQL_3= @SQL_3 + RTRIM(convert(varchar(500), PIVOT))
FROM #PIVOT
WHERE IdRow > @intnumRegs
IF @AGRUPACION<>'*'
BEGIN
SET @SQL_4=@SQL_4 +' FROM ' + @TABLA + ' GROUP BY ' + @AGRUPACION +' ORDER BY '+@AGRUPACION
END
ELSE
BEGIN
SET @SQL_4=@SQL_4 + '''TODOS'' AS T FROM ' + @TABLA
END
Ahora tenemos lo que dice Ándres:
Execute ( @SQL_1 + @SQL_2 +@SQL_3 @SQL_4 )
Esperemos que funcione.
Saludos y suerte!!