Sunteți pe pagina 1din 2

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) + '_ao_' + 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) + '_ao_' + 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) + ''_ao_'' + 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) + ''_ao_'' + 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

C:\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) + ''_ao_'' + 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) + ''_ao_'' + 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

S-ar putea să vă placă și