
18/01/2007, 12:40
|
 | | | Fecha de Ingreso: julio-2006
Mensajes: 161
Antigüedad: 18 años, 6 meses Puntos: 5 | |
Re: solucion a Cross table de Maestros del Web Daniel00
gracias de nuevo
pues utilizo el codigo de mathias thayer con algunas modificaciones
Código:
CREATE PROCEDURE Cross_table
--Creamos el procedimiento almacenado.
@TABLA varchar(255),
@PIVOT VARCHAR(255),
@AGRUPACION varchar(255),
@CAMPO varchar(255),
@CAMPO2 VARCHAR(255),
@CALCULO varchar(20)
AS
--Declaramos las variables que nos permitirán crear el sql con los "CASES"
DECLARE @STRG AS VARCHAR(8000)
DECLARE @SQL AS VARCHAR(8000)
CREATE TABLE #PIVOT ( #PIVOT VARCHAR (6000))
SET @STRG=''
SET @SQL=''
SET @STRG=@STRG+ 'INSERT INTO #PIVOT 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 '
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 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 '
EXECUTE (@STRG)
SET @SQL ='SELECT ' + @AGRUPACION
SELECT @SQL= @SQL + RTRIM(convert(varchar(500), PIVOT)) --> justo en esta consulta se llena la variable @SQL varchar(8000)
FROM #PIVOT ORDER BY PIVOT DESC
IF @AGRUPACION<>'*'
BEGIN
SET @SQL=@SQL+' FROM ' + @TABLA + ' GROUP BY ' + @AGRUPACION +' ORDER BY '+@AGRUPACION
END
ELSE
BEGIN
SET @SQL=@SQL + '''TODOS'' AS T FROM ' + @TABLA
END
GO
Graicas por la colaboracion |