none
Condição RRS feed

  • Pergunta

  • Bom dia

    Amigos do Fórum!

    Estou precisando de uma ajuda, tenho a seguinte procedure que preciso colocar uma condição exemplo, até o Mês 05/2019 considerar a condição do campo   do And RM.ReqMatOper = 'Retirada' e após esta data considerar a condição And RM.ReqMatOper = 'Transferência'

    Se conseguirem ajudar agradeço, abaixo segue procedimento.

    GO
    /****** Object:  StoredProcedure [dbo].[uspConsumoMateriaisProducao]    Script Date: 02/19/2020 08:40:49 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[uspConsumoMateriaisProducao]  
    										@pMesAnoIni       DATETIME,  
    										@pMesAnoFim       DATETIME,  
    										@ProdutoInicial   VARCHAR (10),  
    										@ProdutoFinal     VARCHAR (10)  
      
    AS 
    	BEGIN  
    		/*Verificando se existe a table temporária global ##Producao. Se existir iremos dropa-la*/  
    		IF Exists (SELECT 1 FROM tempdb.dbo.sysobjects where id = OBJECT_ID('tempdb..[##ItensConsumoProducao]'))  
    				  Drop Table ##ItensConsumoProducao  
      
    		SELECT
    				 P.ProdCodEstr,  
    				 P.ProdNome,   
    				 IRM.ItReqMatUnidMedCod  
    				,Jan = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '1'   THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Fev = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '2'   THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Mar = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '3'   THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Abr = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '4'   THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Mai = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '5'   THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Jun = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '6'   THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Jul = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '7'   THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Ago = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '8'   THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Setem = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '9' THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Outub = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '10'THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Nov = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '11'  THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,Dez = SUM(Case When MONTH(IRM.ItReqMatAtendData) = '12'  THEN ISnull(IRM.ItReqMatQtdAtend,0) Else 0 End)   
    				,'TotalMes' = SUM(IRM.ItReqMatQtdAtend),  
    				ContagemMes =   DATEDIFF(Month, @pMesAnoIni, @pMesAnoFim)+ 1  
          
                        Into ##ItensConsumoProducao  
                          
    		 FROM ITEM_REQ_MAT IRM WITH(NOLOCK),  
    			  Produto P  WITH(NOLOCK),
                  REQ_MAT RM WITH(NOLOCK)    
       
    		WHERE
    			  P.ProdCodEstr = IRM.ProdCodEstr  
    		 AND  IRM.ItReqMatAtendData >= @pMesAnoIni  
             AND  IRM.ItReqMatAtendData <=  @pMesAnoFim   
             AND((P.ProdCodEstr >= @ProdutoInicial And P.ProdCodEstr <= @ProdutoFinal)  
              OR (  '' = @ProdutoInicial And '' = @ProdutoFinal))  
             AND RM.ReqMatNum = IRM.ReqMatNum
             AND RM.EmpCod = IRM.EmpCod
             AND RM.TipoReqMatCod IN ('0000001','0000003','0000015')
             AND RM.ReqMatBaixouEstq = 'Sim'
             AND RM.ReqMatOper = 'Transferência'
            
     
      
    	 GROUP BY P.ProdCodEstr, P.ProdNome, IRM.ItReqMatUnidMedCod  
    
      
      
    	SELECT *,  
    			Media = TotalMes/ContagemMes  
      
    	  FROM ##ItensConsumoProducao   
    
    	ORDER BY  1 ASC  
    
    END

     

    quarta-feira, 19 de fevereiro de 2020 12:53

Respostas

Todas as Respostas

  • Leandro,

    Pensando de uma forma rápida sem muita análise a sua necessidade podemos pensar no uso do operador lógico Case e da função IIF().

    Mas gostaria de entender se esta condição seria definida na cláusula Where como elemento para filtrar os dados do seu select, ou no nível de coluna para determinar o valor de retorno de uma coluna específica.

    Poderia nos dizer?


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

    quarta-feira, 19 de fevereiro de 2020 13:23
  • Bom dia,

    Leandro, experimente trocar a condição abaixo:

             AND RM.ReqMatOper = 'Transferência'

    pelas seguintes condições:

             AND ( (IRM.ItReqMatAtendData < '20190601' AND RM.ReqMatOper = 'Retirada') OR
                   (IRM.ItReqMatAtendData >= '20190601' AND RM.ReqMatOper = 'Transferência') )

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 19 de fevereiro de 2020 13:46
  • Deleted
    quarta-feira, 19 de fevereiro de 2020 19:29