miércoles, 4 de septiembre de 2013

Pivote Dinámico para Ejemplo Anterior


CREATE PROCEDURE [Tutorial].[UspPivoteDinamicoEjemplo]
@IdValorParametro INT
AS
DECLARE @Pivotiar VARCHAR(MAX) = ''
DECLARE @PivotiarSuma VARCHAR(MAX) = ''

 --DECLARACION DE LA TABLA PARA INSERTAR LOS CAMPOS COLUMNAS
  DECLARE @TblColumnas TABLE 
  (
Id INT IDENTITY(1,1),
Columna VARCHAR(20)
  )

--RELLENANDO LA TABLA 
INSERT INTO @TblColumnas
SELECT [Description] FROM Tutorial.Catalogos
WHERE  IdCatalogo = @IdValorParametro
ORDER BY [Description] DESC

SET @Pivotiar = @Pivotiar +  (SELECT ',['+ Columna + ']'  FROM @TblColumnas FOR XML PATH(''))--PARA CONVERTIR LAS FILAS A UNA SOLA VARIABLE CONCATENANDO CON COMA
SET @Pivotiar = SUBSTRING(@Pivotiar,2,LEN(@Pivotiar)) --PARA QUITAR LA PRIMAR COMA 
SET @PivotiarSuma = REPLACE(@Pivotiar,',','+')--PARA HACER CALCULOS EN EL SELECT CON LAS COLUMNAS

   EXEC('SELECT ROW_NUMBER() OVER(ORDER BY IdCampo DESC) AS Id,*,('+@PivotiarSuma+') AS Total
FROM ( 
SELECT * FROM Tutorial.VwVistaConValores WHERE IdParametro = '+@IdValorParametro +
') Pvt
PIVOT (SUM(Monto) FOR [Description] IN ('+@Pivotiar+')) AS Pivote')

No hay comentarios.:

Publicar un comentario