Ver Mensaje Individual
  #13 (permalink)  
Antiguo 18/01/2007, 16:49
daniel00
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: solucion a Cross table de Maestros del Web

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!!