Ok , esta es la solucion al problemilla
, cabe destacar que estre procedimiento hace 2 pivots.
esta probado en el Query Analizer, pero se puede convertir en Store
Procedure Con solo aumentar estas lineas
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
y se suprimirria las asignaciones en el siguiente codigo
Código:
DECLARE @TABLA varchar(255)
DECLARE @PIVOT VARCHAR(255)
DECLARE @AGRUPACION varchar(255)
DECLARE @CAMPO varchar(255)
DECLARE @CAMPO2 VARCHAR(255)
DECLARE @CALCULO varchar(20)
DECLARE @STRG AS VARCHAR(8000)
DECLARE @SQL1 AS VARCHAR(200)
DECLARE @SQL2 AS VARCHAR(8000)
DECLARE @SQL3 AS VARCHAR(8000)
DECLARE @SQL4 AS VARCHAR(2000)
DECLARE @CANT_REG AS INT
DECLARE @LIMIT AS INT
SET @TABLA='[Ventas Comerciales Regulares OPT]'
SET @PIVOT='LN'
SET @AGRUPACION ='[CODIGO VENDEDOR],VENDEDOR,NIT,CLIENTE,SUCURSAL,CANAL,[CLASE CLIENTE],DIRECCION,TELEFONO,BARRIO_V,CIUDAD,SUBCATEGORIA'
SET @CAMPO='UN'
SET @CAMPO2='T'
SET @CALCULO ='SUM'
CREATE TABLE #PIVOT (IdRow integer IDENTITY(1,1) , PIVOTE VARCHAR (6000))
-- limpiamos las variables por si a caso
SET @STRG=''
SET @SQL1=''
SET @SQL2=''
SET @SQL3=''
SET @SQL4=''
---ejecutamos el primer PIVOT el cual suma cantidades
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 '
EXECUTE (@STRG)
--ejecutamos el segunto PIVOT el cual suma Cantidades monetarias
SET @STRG= 'INSERT INTO #PIVOT (PIVOTE) 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)
---HALLAMOS LA CANTIDAD TOTAL DE REGISTROS, PARA DIVIDIRLOS POR 2 Y ASI CALCULAR EL SQL
SELECT @CANT_REG= COUNT(*) FROM #PIVOT
--HALLAMOS EL LIMITE DE REGISTROS
SET @LIMIT = @CANT_REG / 2
--A CONTINUACION REALIZAMOS LAS CONSULTAS SQL CON LAS LIMITANTES
SET @SQL1= 'SELECT ' + @AGRUPACION
SET @SQL2=''
SELECT @SQL2= @SQL2 + RTRIM(CONVERT(VARCHAR (500), PIVOTE))
FROM #PIVOT
WHERE IdRow <= @LIMIT
SET @SQL3=''
SELECT @SQL3=@SQL3 + RTRIM(CONVERT(VARCHAR (500), PIVOTE))
FROM #PIVOT
WHERE IdRow > @LIMIT
SET @SQL4=''
SET @SQL4=@SQL4 + ' FROM ' + @TABLA + 'GROUP BY ' + @AGRUPACION + ' ORDER BY ' + @AGRUPACION
EXEC (@SQL1+@SQL2+@SQL3+@SQL4)
GO
se me olvidaba agradecer a Andres por su aporte con este problema !!
Gracias Daniel !!