Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
languagesql
titleAnálise Diferenças Entre D13 e D14
collapsetrue
DECLARE @DataFechamento DATE;
SET @DataFechamento = '20191218';
DECLARE @Produto VARCHAR(15);
SET @Produto = 'PC';
DECLARE @Armazem VARCHAR(2);
SET @Armazem = '02';

SELECT TOT.TOT_LOCAL
	,TOT.TOT_ENDER
	,TOT.TOT_PRDORI
	,TOT.TOT_PRODUT
	,TOT.TOT_LOTECT
	,TOT.TOT_NUMLOT
	,TOT.TOT_NUMSER
	,TOT.TOT_IDUNIT
	,TOT.TOT_QTDEST - ((TOT.TOT_QTDINI + TOT.TOT_QTDENT) - TOT.TOT_QTDSAI) DIFERENCA_D14_D13
FROM (
	SELECT TOT_LOCAL
		,TOT_ENDER
		,TOT_PRDORI
		,TOT_PRODUT
		,TOT_LOTECT
		,TOT_NUMLOT
		,TOT_NUMSER
		,TOT_IDUNIT
		,CASE 
			WHEN FCH.FCH_DATA IS NULL
				THEN '19800101'
			ELSE FCH.FCH_DATA
			END TOT_DATA
		,CAST ((
				CASE 
					WHEN SLD_QTDEST IS NULL
						THEN 0
					ELSE SLD_QTDEST
					END
				) AS DECIMAL(12, 3)) TOT_QTDEST
		,CAST ((
				CASE 
					WHEN FCH.FCH_SALDO IS NULL
						THEN 0
					ELSE FCH.FCH_SALDO
					END
				) AS DECIMAL(12, 3)) TOT_QTDINI
		,CAST ((
				CASE 
					WHEN ENT.ENT_SALDO IS NULL
						THEN 0
					ELSE ENT.ENT_SALDO
					END
				) AS DECIMAL(12, 3)) TOT_QTDENT
		,CAST ((
				CASE 
					WHEN SAI.SAI_SALDO IS NULL
						THEN 0
					ELSE SAI.SAI_SALDO
					END
				) AS DECIMAL(12, 3)) TOT_QTDSAI
	FROM (
		SELECT D14.D14_LOCAL TOT_LOCAL
			,D14.D14_ENDER TOT_ENDER
			,D14.D14_PRDORI TOT_PRDORI
			,D14.D14_PRODUT TOT_PRODUT
			,D14.D14_LOTECT TOT_LOTECT
			,D14.D14_NUMLOT TOT_NUMLOT
			,D14.D14_NUMSER TOT_NUMSER
			,D14.D14_IDUNIT TOT_IDUNIT
		FROM D14990 D14
		WHERE D14.D14_FILIAL = '01'
			AND D14.D_E_L_E_T_ = ' '
		
		UNION ALL
		
		SELECT D13.D13_LOCAL TOT_LOCAL
			,D13.D13_ENDER TOT_ENDER
			,D13.D13_PRDORI TOT_PRDORI
			,D13.D13_PRODUT TOT_PRODUT
			,D13.D13_LOTECT TOT_LOTECT
			,D13.D13_NUMLOT TOT_NUMLOT
			,D13.D13_NUMSER TOT_NUMSER
			,D13.D13_IDUNIT TOT_IDUNIT
		FROM D13990 D13
		WHERE D13.D13_FILIAL = '01'
			AND D13.D_E_L_E_T_ = ' '
		) TOT
	LEFT JOIN (
		SELECT D14.D14_LOCAL SLD_LOCAL
			,D14.D14_ENDER SLD_ENDER
			,D14.D14_PRDORI SLD_PRDORI
			,D14.D14_PRODUT SLD_PRODUT
			,D14.D14_LOTECT SLD_LOTECT
			,D14.D14_NUMLOT SLD_NUMLOT
			,D14.D14_NUMSER SLD_NUMSER
			,D14.D14_IDUNIT SLD_IDUNIT
			,D14.D14_QTDEST SLD_QTDEST
		FROM D14990 D14
		WHERE D14.D14_FILIAL = '01'
			AND D14.D_E_L_E_T_ = ' '
		) SLD ON SLD.SLD_LOCAL = TOT.TOT_LOCAL
		AND SLD.SLD_ENDER = TOT.TOT_ENDER
		AND SLD.SLD_PRDORI = TOT.TOT_PRDORI
		AND SLD.SLD_PRODUT = TOT.TOT_PRODUT
		AND SLD.SLD_LOTECT = TOT.TOT_LOTECT
		AND SLD.SLD_NUMLOT = TOT.TOT_NUMLOT
		AND SLD.SLD_NUMSER = TOT.TOT_NUMSER
		AND SLD.SLD_IDUNIT = TOT.TOT_IDUNIT
	LEFT JOIN (   
		SELECT MAX(D15.D15_DATA) FCH_DATA,
			,   D15.D15_LOCAL FCH_LOCAL,
			,   D15.D15_ENDER FCH_ENDER,
			,   D15.D15_PRDORI FCH_PRDORI,
			,   D15.D15_PRODUT FCH_PRODUT,
			,   D15.D15_LOTECT FCH_LOTECT,
			,   D15.D15_NUMLOT FCH_NUMLOT,
			,   D15.D15_NUMSER FCH_NUMSER,
			,   D15.D15_IDUNIT FCH_IDUNIT,
			,   D15.D15_QINI FCH_SALDO
		       FROM D15990 D15
		WHERE D15.D15_FILIAL = '01'
			AND D15.D15_DATA = @DataFechamento
			AND D15.D_E_L_E_T_ = ' '
		GROUP BY D15.D15_LOCAL
			,D15.D15_ENDER
			,D15.D15_PRDORI
			,D15.D15_PRODUT
			,D15.D15_LOTECT
			,D15.D15_NUMLOT
			,D15.D15_NUMSER
			,D15.D15_IDUNIT
			,D15.D15_QINI
		) FCH ON FCH.FCH_LOCAL = TOT.TOT_LOCAL
		AND FCH.FCH_ENDER = TOT.TOT_ENDER
		AND FCH.FCH_PRDORI = TOT.TOT_PRDORI
		AND FCH.FCH_PRODUT = TOT.TOT_PRODUT
		AND FCH.FCH_LOTECT = TOT.TOT_LOTECT
		AND FCH.FCH_NUMLOT = TOT.TOT_NUMLOT
		AND FCH.FCH_NUMSER = TOT.TOT_NUMSER
		AND FCH.FCH_IDUNIT = TOT.TOT_IDUNIT
	LEFT JOIN (
		SELECT D13.D13_LOCAL ENT   INNER JOIN 	(SELECT MAX(D15_DATA) D15_DATA,
									D15_LOCAL,
									D15_ENDER,
									D15_PRDORI,
									D15_PRODUT,
									D15_LOTECT,
									D15_NUMLOT,
									D15_NUMSER,
									D15_IDUNIT
							FROM D15990 D153
							WHERE D153.D15_FILIAL = '01'
							AND D153.D15_DATA <= @DataFechamento
				 			AND D153.D_E_L_E_T_ = ' ' 
							GROUP BY D153.D15_LOCAL,
									D153.D15_ENDER,
									D153.D15_PRDORI,
									D153.D15_PRODUT,
									D153.D15_LOTECT,		
									D153.D15_NUMLOT,
									D153.D15_NUMSER,
									D153.D15_IDUNIT) D15MAX
				ON D15MAX.D15_LOCAL = D15.D15_LOCAL 
				AND D15MAX.D15_ENDER =  D15.D15_ENDER 
				AND D15MAX.D15_PRDORI = D15.D15_PRDORI 
				AND D15MAX.D15_PRODUT = D15.D15_PRODUT 
				AND D15MAX.D15_LOTECT = D15.D15_LOTECT 
				AND D15MAX.D15_NUMLOT = D15.D15_NUMLOT 
				AND D15MAX.D15_NUMSER = D15.D15_NUMSER 
				AND D15MAX.D15_IDUNIT = D15.D15_IDUNIT 
				AND D15MAX.D15_DATA = D15.D15_DATA	
				WHERE D15.D15_FILIAL = '01'
			    AND D15.D_E_L_E_T_ = ' '   
        ) FCH ON FCH.FCH_LOCAL = TOT.TOT_LOCAL
		AND FCH.FCH_ENDER = TOT.TOT_ENDER
		AND FCH.FCH_PRDORI = TOT.TOT_PRDORI
		AND FCH.FCH_PRODUT = TOT.TOT_PRODUT
		AND FCH.FCH_LOTECT = TOT.TOT_LOTECT
		AND FCH.FCH_NUMLOT = TOT.TOT_NUMLOT
		AND FCH.FCH_NUMSER = TOT.TOT_NUMSER
		AND FCH.FCH_IDUNIT = TOT.TOT_IDUNIT
	LEFT JOIN (
		SELECT D13.D13_LOCAL ENT_LOCAL
			,D13.D13_ENDER ENT_ENDER
			,D13.D13_PRDORI ENT_PRDORI
			,D13.D13_PRODUT ENT_PRODUT
			,D13.D13_LOTECT ENT_LOTECT
			,D13.D13_NUMLOT ENT_NUMLOT
			,D13.D13_NUMSER ENT_NUMSER
			,D13.D13_IDUNIT ENT_IDUNIT
			,SUM(D13.D13_QTDEST) ENT_SALDO
		FROM D13990 D13
		WHERE D13.D13_FILIAL = '01'    
		AND D13.D13_DTESTO > (SELECT COALESCE(MAX(D151.D15_DATA),' ')
									FROM D15990 D151
			   						WHERE D151.D15_FILIAL = '01'
									AND D151.D15_DATA <=  @DataFechamento
									AND D151.D_E_L_E_T_ = ' '
	   								AND D151.D15_ENDER = D13.D13_ENDER
									AND D151.D15_PRDORI = D13.D13_PRDORI
									AND D151.D15_PRODUT = D13.D13_PRODUT
				   					AND D151.D15_LOTECT = D13.D13_LOTECT
				   					AND D151.D15_NUMLOT = D13.D13_NUMLOT
									AND D151.D15_NUMSER = D13.D13_NUMSER
									AND D151.D15_IDUNIT = D13.D13_IDUNIT)    
			AND D13.D13_TM = '499'
			AND D13.D13_USACAL <> '2'
			AND D13.D_E_L_E_T_ = ' '
		GROUP BY D13.D13_LOCAL
			,D13.D13_ENDER ENT_ENDER
			,D13.D13_PRDORI ENT_PRDORI
			,D13.D13_PRODUT ENT_PRODUT
			,D13.D13_LOTECT ENT_LOTECT
			,D13.D13_NUMLOT ENT_NUMLOT
			,D13.D13_NUMSER ENT_NUMSER
			,D13.D13_IDUNIT
		) ENT ON ENT_IDUNIT
			,SUM(D13.D13_QTDEST) ENT_SALDO
		FROM D13990 D13
		WHERE D13.D13_FILIAL = '01'
			AND D13.D13_DTESTO > @DataFechamento
			AND D13.D13_TM = '499'
			AND D13.D13_USACAL <> '2'
			AND D13.D_E_L_E_T_ = ' '
		GROUP BY D13.D13.ENT_LOCAL = TOT.TOT_LOCAL
		AND ENT.ENT_ENDER = TOT.TOT_ENDER
		AND ENT.ENT_PRDORI = TOT.TOT_PRDORI
		AND ENT.ENT_PRODUT = TOT.TOT_PRODUT
		AND ENT.ENT_LOTECT = TOT.TOT_LOTECT
		AND ENT.ENT_NUMLOT = TOT.TOT_NUMLOT
		AND ENT.ENT_NUMSER = TOT.TOT_NUMSER
		AND ENT.ENT_IDUNIT = TOT.TOT_IDUNIT
	LEFT JOIN (
		SELECT D13.D13_LOCAL SAI_LOCAL
			,D13.D13_ENDER SAI_ENDER
			,D13.D13_PRDORI SAI_PRDORI
			,D13.D13_PRODUT SAI_PRODUT
			,D13.D13_LOTECT SAI_LOTECT
			,D13.D13_NUMLOT SAI_NUMLOT
			,D13.D13_NUMSERD13_NUMSER SAI_NUMSER
			,D13.D13_IDUNIT SAI_IDUNIT
			,SUM(D13.D13_IDUNITQTDEST) SAI_SALDO
		)FROM ENT ON ENT.ENT_LOCAL = TOT.TOT_LOCALD13990 D13
		WHERE D13.D13_FILIAL = '01'    
		AND ENTD13.ENTD13_ENDER = TOT.TOT_ENDER
		AND ENT.ENT_PRDORI = TOT.TOT_PRDORI
		AND ENT.ENT_PRODUT = TOT.TOT_PRODUT
		AND ENT.ENT_LOTECT = TOT.TOT_LOTECT
		AND ENT.ENT_NUMLOT = TOT.TOT_NUMLOT
		AND ENT.ENT_NUMSER = TOT.TOT_NUMSER
		AND ENT.ENT_IDUNIT = TOT.TOT_IDUNIT
	LEFT JOIN (
		SELECT D13.D13_LOCAL SAI_LOCAL
			,D13.D13_ENDER SAI_ENDER
			,D13.D13_PRDORI SAI_PRDORI
			,D13.D13_PRODUT SAI_PRODUT
			,D13.D13_LOTECT SAI_LOTECT
			,D13.D13_NUMLOT SAI_NUMLOT
			,D13.D13_NUMSER SAI_NUMSER
			,D13.D13_IDUNIT SAI_IDUNIT
			,SUM(D13.D13_QTDEST) SAI_SALDO
		FROM D13990 D13
		WHERE D13.D13_FILIAL = '01'
			AND D13.D13_DTESTO > @DataFechamentoDTESTO > (SELECT COALESCE(MAX(D151.D15_DATA),' ')
									FROM D15990 D151
			   						WHERE D151.D15_FILIAL = '01'
									AND D151.D15_DATA <=  @DataFechamento
									AND D151.D_E_L_E_T_ = ' '
	   								AND D151.D15_ENDER = D13.D13_ENDER
									AND D151.D15_PRDORI = D13.D13_PRDORI
									AND D151.D15_PRODUT = D13.D13_PRODUT
				   					AND D151.D15_LOTECT = D13.D13_LOTECT
				   					AND D151.D15_NUMLOT = D13.D13_NUMLOT
									AND D151.D15_NUMSER = D13.D13_NUMSER
									AND D151.D15_IDUNIT = D13.D13_IDUNIT)    
			AND D13.D13_TM = '999'
			AND D13.D13_USACAL <> '2'
			AND D13.D_E_L_E_T_ = ' '
		GROUP BY D13.D13_LOCAL
			,D13.D13_ENDER
			,D13.D13_PRDORI
			,D13.D13_PRODUT
			,D13.D13_LOTECT
			,D13.D13_NUMLOT
			,D13.D13_NUMSER
			,D13.D13_IDUNIT
		) SAI ON SAI.SAI_LOCAL = TOT.TOT_LOCAL
		AND SAI.SAI_ENDER = TOT.TOT_ENDER
		AND SAI.SAI_PRDORI = TOT.TOT_PRDORI
		AND SAI.SAI_PRODUT = TOT.TOT_PRODUT
		AND SAI.SAI_LOTECT = TOT.TOT_LOTECT
		AND SAI.SAI_NUMLOT = TOT.TOT_NUMLOT
		AND SAI.SAI_NUMSER = TOT.TOT_NUMSER
		AND SAI.SAI_IDUNIT = TOT.TOT_IDUNIT
	GROUP BY TOT.TOT_LOCAL
		,TOT.TOT_ENDER
		,TOT.TOT_PRDORI
		,TOT.TOT_PRODUT
		,TOT.TOT_LOTECT
		,TOT.TOT_NUMLOT
		,TOT.TOT_NUMSER
		,TOT.TOT_IDUNIT
		,FCH.FCH_DATA
		,SLD.SLD_QTDEST
		,FCH.FCH_SALDO
		,ENT.ENT_SALDO
		,SAI.SAI_SALDO
	) TOT
WHERE (TOT.TOT_QTDEST - ((TOT.TOT_QTDINI + TOT.TOT_QTDENT) - TOT.TOT_QTDSAI)) <> 0
	AND TOT.TOT_LOCAL = @Armazem
	AND TOT.TOT_PRDORI = @Produto

...