none
Ano anterior no parâmetro RRS feed

  • Pergunta

  • Boa tarde

    Mais uma vez gostaria de ajuda dos membros do fórum, tenho a seguinte procedure abaixo onde preciso que retorno o custo do produto campo S.SaldoEstqDataCustoUnit  sempre de dezembro do ano anterior ao parâmetro passado na consulta.

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER	PROCEDURE [dbo].[uspInflacaoMateriaisProducaoCalcCustoAnt] (@vPProdCodEstr			VARCHAR(30),
    														            @vPMes		INT,
    														            @vPAno		INT,
    														            @vRCustoMedioAnterior	NUMERIC(24,9) OUTPUT) AS
    BEGIN
    
    		DECLARE	@vTabelaTemporariaCusto	TABLE ( CustoMedioAnterior	NUMERIC(24,9))
    	
    	
    		INSERT
    		INTO	@vTabelaTemporariaCusto
    	
    	
    		SELECT S.SaldoEstqDataCustoUnit
    		FROM   SALDO_ESTQ_DATA S WITH(NOLOCK)
      INNER JOIN   PRODUTO P WITH(NOLOCK) ON(P.ProdCodEstr = S.ProdCodEstr)
      INNER JOIN  PROD_UNID_MED PUM WITH(NOLOCK) ON(PUM.ProdCodEstr = P.ProdCodEstr AND PUM.ProdUnidMedPos = 1)
            WHERE S.EmpCod = '1'
              AND(S.ProdCodEstr  = @vPProdCodEstr)
              AND   S.SaldoEstqData = (SELECT MAX(SaldoEstqData) FROM SALDO_ESTQ_DATA S1 WITH(NOLOCK)
                                        WHERE S1.EmpCod = S.EmpCod AND S1.ProdCodEstr = S.ProdCodEstr
                                          AND MONTH(S1.SaldoEstqData) =  @vPMes
                                          AND YEAR (S1.SaldoEstqData) =  @vPAno)
    
    	
    	
    	      SELECT	@vRCustoMedioAnterior = ISNULL(SUM(CustoMedioAnterior), 0)
    	        FROM	@vTabelaTemporariaCusto
    
    END

    sábado, 21 de março de 2020 17:48

Respostas

  • Deleted
    sábado, 21 de março de 2020 19:04
  • Boa tarde

    Mais uma vez gostaria de ajuda dos membros do fórum, tenho a seguinte procedure abaixo onde preciso que retorno o custo do produto campo S.SaldoEstqDataCustoUnit  sempre de dezembro do ano anterior ao parâmetro passado na consulta.

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER	PROCEDURE [dbo].[uspInflacaoMateriaisProducaoCalcCustoAnt] (@vPProdCodEstr			VARCHAR(30),
    														            @vPMes		INT,
    														            @vPAno		INT,
    														            @vRCustoMedioAnterior	NUMERIC(24,9) OUTPUT) AS
    BEGIN
    
    		DECLARE	@vTabelaTemporariaCusto	TABLE ( CustoMedioAnterior	NUMERIC(24,9))
    	
    	
    		INSERT
    		INTO	@vTabelaTemporariaCusto
    	
    	
    		SELECT S.SaldoEstqDataCustoUnit
    		FROM   SALDO_ESTQ_DATA S WITH(NOLOCK)
      INNER JOIN   PRODUTO P WITH(NOLOCK) ON(P.ProdCodEstr = S.ProdCodEstr)
      INNER JOIN  PROD_UNID_MED PUM WITH(NOLOCK) ON(PUM.ProdCodEstr = P.ProdCodEstr AND PUM.ProdUnidMedPos = 1)
            WHERE S.EmpCod = '1'
              AND(S.ProdCodEstr  = @vPProdCodEstr)
              AND   S.SaldoEstqData = (SELECT MAX(SaldoEstqData) FROM SALDO_ESTQ_DATA S1 WITH(NOLOCK)
                                        WHERE S1.EmpCod = S.EmpCod AND S1.ProdCodEstr = S.ProdCodEstr
                                          AND MONTH(S1.SaldoEstqData) =  @vPMes
                                          AND YEAR (S1.SaldoEstqData) =  @vPAno)
    
    	
    	
    	      SELECT	@vRCustoMedioAnterior = ISNULL(SUM(CustoMedioAnterior), 0)
    	        FROM	@vTabelaTemporariaCusto
    
    END

    Leandro,

    Analise remover a linha das junções:

    
    INNER JOIN   PRODUTO P WITH(NOLOCK) ON(P.ProdCodEstr = S.ProdCodEstr)
      INNER JOIN  PROD_UNID_MED PUM WITH(NOLOCK) ON(PUM.ProdCodEstr = P.ProdCodEstr AND PUM.ProdUnidMedPos = 1)

    Agora outro ponto de análise, o uso da subquery para obter a maior data, acredito que isso não seja necessário:

    (SELECT MAX(SaldoEstqData) FROM SALDO_ESTQ_DATA S1 WITH(NOLOCK)
                                        WHERE S1.EmpCod = S.EmpCod AND S1.ProdCodEstr = S.ProdCodEstr
                                          AND MONTH(S1.SaldoEstqData) =  @vPMes
                                          AND YEAR (S1.SaldoEstqData) =  @vPAno)

    Uma observação que eu gostaria de fazer se relaciona ao uso da variável do Tipo Tabela, talvez, podemos pensar no que se refere a questões de volume de dados e depois o acesso aos mesmos, de uma forma bem simples e superficial o uso de uma table temporária poderia ser mais indicado.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sábado, 21 de março de 2020 20:18

Todas as Respostas

  • Deleted
    sábado, 21 de março de 2020 19:04
  • Boa tarde

    Mais uma vez gostaria de ajuda dos membros do fórum, tenho a seguinte procedure abaixo onde preciso que retorno o custo do produto campo S.SaldoEstqDataCustoUnit  sempre de dezembro do ano anterior ao parâmetro passado na consulta.

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER	PROCEDURE [dbo].[uspInflacaoMateriaisProducaoCalcCustoAnt] (@vPProdCodEstr			VARCHAR(30),
    														            @vPMes		INT,
    														            @vPAno		INT,
    														            @vRCustoMedioAnterior	NUMERIC(24,9) OUTPUT) AS
    BEGIN
    
    		DECLARE	@vTabelaTemporariaCusto	TABLE ( CustoMedioAnterior	NUMERIC(24,9))
    	
    	
    		INSERT
    		INTO	@vTabelaTemporariaCusto
    	
    	
    		SELECT S.SaldoEstqDataCustoUnit
    		FROM   SALDO_ESTQ_DATA S WITH(NOLOCK)
      INNER JOIN   PRODUTO P WITH(NOLOCK) ON(P.ProdCodEstr = S.ProdCodEstr)
      INNER JOIN  PROD_UNID_MED PUM WITH(NOLOCK) ON(PUM.ProdCodEstr = P.ProdCodEstr AND PUM.ProdUnidMedPos = 1)
            WHERE S.EmpCod = '1'
              AND(S.ProdCodEstr  = @vPProdCodEstr)
              AND   S.SaldoEstqData = (SELECT MAX(SaldoEstqData) FROM SALDO_ESTQ_DATA S1 WITH(NOLOCK)
                                        WHERE S1.EmpCod = S.EmpCod AND S1.ProdCodEstr = S.ProdCodEstr
                                          AND MONTH(S1.SaldoEstqData) =  @vPMes
                                          AND YEAR (S1.SaldoEstqData) =  @vPAno)
    
    	
    	
    	      SELECT	@vRCustoMedioAnterior = ISNULL(SUM(CustoMedioAnterior), 0)
    	        FROM	@vTabelaTemporariaCusto
    
    END

    Leandro,

    Analise remover a linha das junções:

    
    INNER JOIN   PRODUTO P WITH(NOLOCK) ON(P.ProdCodEstr = S.ProdCodEstr)
      INNER JOIN  PROD_UNID_MED PUM WITH(NOLOCK) ON(PUM.ProdCodEstr = P.ProdCodEstr AND PUM.ProdUnidMedPos = 1)

    Agora outro ponto de análise, o uso da subquery para obter a maior data, acredito que isso não seja necessário:

    (SELECT MAX(SaldoEstqData) FROM SALDO_ESTQ_DATA S1 WITH(NOLOCK)
                                        WHERE S1.EmpCod = S.EmpCod AND S1.ProdCodEstr = S.ProdCodEstr
                                          AND MONTH(S1.SaldoEstqData) =  @vPMes
                                          AND YEAR (S1.SaldoEstqData) =  @vPAno)

    Uma observação que eu gostaria de fazer se relaciona ao uso da variável do Tipo Tabela, talvez, podemos pensar no que se refere a questões de volume de dados e depois o acesso aos mesmos, de uma forma bem simples e superficial o uso de uma table temporária poderia ser mais indicado.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sábado, 21 de março de 2020 20:18
  • Bom dia

    José!

    Preciso do último valor da coluna S.SaldoEstqDataCustoUnit no mês de dezembro do ano anterior ao parâmetro da consulta exemplo:

    Pesquisa realizada com parâmetros:

    Ano 2019

    Mês 05

    Deve trazer o último valor da coluna S.SaldoEstqDataCustoUnit  de Dezembro de 2018.

    segunda-feira, 23 de março de 2020 10:22
  • Obrigado pela dica, desta forma também atende.
    segunda-feira, 23 de março de 2020 10:59
  • Obrigado pela dica, desta forma também atende.

    Leandro,

    Ok, que bom que conseguimos te ajudar.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 24 de março de 2020 21:45
  • Deleted
    quarta-feira, 25 de março de 2020 11:50