ventas por producto pivot

2
1 C:\Users\Jonathan Lucas\Desktop\Ventas por producto pivot.sql USE [ FH ] GO --/// ISC . JONATHAN LUCAS FLORES /// SET ANSI _ NULLS ON GO SET QUOTED _ IDENTIFIER ON GO CREATE PROCEDURE [ dbo ].[ WEB _ VENTAS _ POR _ PRODUCTO _ PIEZAS _ MONTO ] @ PRODUCTO AS NVARCHAR ( 20 ) , @ CANALDIS AS NVARCHAR ( 20 ) , @ FECHAINI DATE , @ FECHAFIN DATE AS SET NOCOUNT ON ; DECLARE @ sql nvarchar ( MAX ) = ''; DECLARE @ columns _ 1 nvarchar ( MAX ) = ''; DECLARE @ columns _ 2 nvarchar ( MAX ) = ''; SET @ columns _ 1 = STUFF ( ( SELECT DISTINCT ', Piezas _ Mes ' + cast ( MONTH ( DocDate ) as varchar ) + '_ año _' + cast ( YEAR ( DocDate ) as varchar ) FROM ( SELECT DocDate FROM OINV where DocDate BETWEEN @ FECHAINI AND @ FECHAFIN ) AS P FOR XML PATH ( '' ) ) , 1 , 1 , '' ) ; SET @ columns _ 2 = STUFF ( ( SELECT DISTINCT ', Monto _ Mes ' + cast ( MONTH ( DocDate ) as varchar ) + '_ año _' + cast ( YEAR ( DocDate ) as varchar ) FROM ( SELECT DocDate FROM OINV where DocDate BETWEEN @ FECHAINI AND @ FECHAFIN ) AS P FOR XML PATH ( '' ) ) , 1 , 1 , '' ) ; SET @ sql = N ' select Z . PRODUCTO , Z . DESCRIPCION , ' + @ columns _ 1 + ',' + @ columns _ 2 + N ' from ( select * FROM ( SELECT a . ItemCode AS PRODUCTO , a . Dscription AS DESCRIPCION , '' Piezas _ Mes '' + cast ( MONTH ( b . DocDate ) as varchar ) + ''_ año _'' + cast ( YEAR ( b . DocDate ) as varchar ) AS MES , a . Quantity AS CANTIDAD FROM INV 1 AS a INNER JOIN OINV AS b ON a . DocEntry = b . DocEntry INNER JOIN OCRD AS c ON b . CardCode = c . CardCode WHERE b . DocType = '' I '' and ( c . GroupCode = 100 OR c . GroupCode = 111 ) AND b . DocDate BETWEEN ''' + CAST ( @ FECHAINI AS VARCHAR ) + ''' AND ''' + CAST ( @ FECHAFIN AS VARCHAR ) + ''' UNION SELECT d . ItemCode AS PRODUCTO , d . Dscription AS DESCRIPCION , '' Piezas _ Mes '' + cast ( MONTH ( e . DocDate ) as varchar ) + ''_ año _'' + cast ( YEAR ( e . DocDate ) as varchar ) AS MES , d . Quantity AS CANTIDAD FROM RIN 1 AS d INNER JOIN ORIN AS e ON d . DocEntry = e . DocEntry INNER JOIN OCRD AS f ON e . CardCode = f . CardCode WHERE e . DocType = '' I '' and ( f . GroupCode = 100 OR f . GroupCode = 111 ) AND e . DocDate BETWEEN ''' + CAST ( @ FECHAINI AS VARCHAR ) + ''' AND ''' + CAST ( @ FECHAFIN AS VARCHAR ) + ''' ) as TABLADATOS

Upload: jonathan-lucas-flores

Post on 24-Dec-2015

212 views

Category:

Documents


0 download

DESCRIPTION

SAP BO

TRANSCRIPT

Page 1: Ventas Por Producto Pivot

1C:\Users\Jonathan Lucas\Desktop\Ventas por producto pivot.sql

USE [FH]

GO

--///ISC. JONATHAN LUCAS FLORES///

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[WEB_VENTAS_POR_PRODUCTO_PIEZAS_MONTO]

@PRODUCTO AS NVARCHAR(20),

@CANALDIS AS NVARCHAR(20),

@FECHAINI DATE,

@FECHAFIN DATE

AS

SET NOCOUNT ON;

DECLARE @sql nvarchar(MAX) = '';

DECLARE @columns_1 nvarchar(MAX) = '';

DECLARE @columns_2 nvarchar(MAX) = '';

SET @columns_1 = STUFF(

(

SELECT DISTINCT

',Piezas_Mes' + cast( MONTH(DocDate) as varchar) + '_año_' + cast( YEAR(DocDate) as varchar)

FROM

(SELECT DocDate FROM OINV where DocDate BETWEEN @FECHAINI AND @FECHAFIN) AS P

FOR XML PATH('')

), 1, 1, '');

SET @columns_2 = STUFF(

(

SELECT DISTINCT

',Monto_Mes' + cast( MONTH(DocDate) as varchar) + '_año_' + cast( YEAR(DocDate) as varchar)

FROM

(SELECT DocDate FROM OINV where DocDate BETWEEN @FECHAINI AND @FECHAFIN) AS P

FOR XML PATH('')

), 1, 1, '');

SET @sql = N'

select

Z.PRODUCTO,

Z.DESCRIPCION,

' + @columns_1 + ',' + @columns_2 + N'

from

(

select

*

FROM

(

SELECT

a.ItemCode AS PRODUCTO,

a.Dscription AS DESCRIPCION,

''Piezas_Mes'' + cast( MONTH(b.DocDate) as varchar) + ''_año_'' + cast( YEAR(b.DocDate)

as varchar) AS MES,

a.Quantity AS CANTIDAD

FROM INV1 AS a

INNER JOIN OINV AS b

ON a.DocEntry=b.DocEntry

INNER JOIN OCRD AS c ON b.CardCode = c.CardCode

WHERE b.DocType = ''I'' and (c.GroupCode = 100 OR c.GroupCode = 111) AND b.DocDate BETWEEN

''' + CAST( @FECHAINI AS VARCHAR) + ''' AND ''' + CAST( @FECHAFIN AS VARCHAR) + '''

UNION

SELECT

d.ItemCode AS PRODUCTO,

d.Dscription AS DESCRIPCION,

''Piezas_Mes'' + cast( MONTH(e.DocDate) as varchar) + ''_año_'' + cast( YEAR(e.DocDate)

as varchar) AS MES,

d.Quantity AS CANTIDAD

FROM RIN1 AS d

INNER JOIN ORIN AS e

ON d.DocEntry = e.DocEntry

INNER JOIN OCRD AS f ON e.CardCode = f.CardCode

WHERE e.DocType = ''I'' and (f.GroupCode = 100 OR f.GroupCode = 111) AND e.DocDate BETWEEN

''' + CAST (@FECHAINI AS VARCHAR) + ''' AND ''' + CAST( @FECHAFIN AS VARCHAR) + '''

) as TABLADATOS

Page 2: Ventas Por Producto Pivot

2C:\Users\Jonathan Lucas\Desktop\Ventas por producto pivot.sql

pivot

(

SUM(TABLADATOS.CANTIDAD) for TABLADATOS.MES IN(' + @columns_1 + N')

) as P

) as Z

inner join

(

select

*

from

(

SELECT

a.ItemCode AS PRODUCTO,

a.Dscription AS DESCRIPCION,

''Monto_Mes'' + cast( MONTH(b.DocDate) as varchar) + ''_año_'' + cast( YEAR(b.DocDate)

as varchar) AS MES,

a.LineTotal AS TOTAL

FROM INV1 AS a

INNER JOIN OINV AS b

ON a.DocEntry=b.DocEntry

INNER JOIN OCRD AS c ON b.CardCode = c.CardCode

WHERE b.DocType = ''I'' and (c.GroupCode = 100 OR c.GroupCode = 111) AND b.DocDate BETWEEN

''' + CAST( @FECHAINI AS VARCHAR) + ''' AND ''' + CAST( @FECHAFIN AS VARCHAR) + '''

UNION

SELECT

d.ItemCode AS PRODUCTO,

d.Dscription AS DESCRIPCION,

''Monto_Mes'' + cast( MONTH(e.DocDate) as varchar) + ''_año_'' + cast( YEAR(e.DocDate)

as varchar) AS MES,

d.LineTotal AS TOTAL

FROM RIN1 AS d

INNER JOIN ORIN AS e

ON d.DocEntry = e.DocEntry

INNER JOIN OCRD AS f ON e.CardCode = f.CardCode

WHERE e.DocType = ''I'' and (f.GroupCode = 100 OR f.GroupCode = 111) AND e.DocDate BETWEEN

''' + CAST( @FECHAINI AS VARCHAR) + ''' AND ''' + CAST( @FECHAFIN AS VARCHAR) + '''

) as TABLADATOS

pivot

(

SUM(TABLADATOS.TOTAL) for TABLADATOS.MES IN (' + @columns_2 + N')

) as P

) as Y

on Z.PRODUCTO = Y.PRODUCTO and Z.DESCRIPCION = Y.DESCRIPCION

order by

PRODUCTO,

DESCRIPCION;';

EXEC sp_executesql @sql;

GO