none
Quantidade de Mês no período do parâmetro RRS feed

  • Pergunta

  • Boa tarde

    Galera!

    Tenho a seguinte query e preciso de uma ajuda, nesta query preciso incluir uma coluna para saber quantos meses foi passado como parâmetro, se puderem ajudar agradeço.

    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),
          QtdMes = 0
          
        
                        Into ItensConsumoProducao
                        
    From ITEM_REQ_MAT IRM,
    	 Produto P  With(NoLock)
    	
    Where 
            P.ProdCodEstr = IRM.ProdCodEstr
    AND	SUBSTRING(CONVERT(VARCHAR, IRM.ItReqMatAtendData, 120), 1, 4) + SUBSTRING(CONVERT(VARCHAR, IRM.ItReqMatAtendData, 120), 6, 2) >= SUBSTRING('01/2015', 4, 4) + SUBSTRING('01/2015', 1, 2)
    AND	SUBSTRING(CONVERT(VARCHAR, IRM.ItReqMatAtendData, 120), 1, 4) + SUBSTRING(CONVERT(VARCHAR, IRM.ItReqMatAtendData, 120), 6, 2) <= SUBSTRING('12/2015', 4, 4) + SUBSTRING('12/2015', 1, 2)
    AND	(P.ProdCodEstr >= '13.03.0298' And P.ProdCodEstr <= '13.03.0298')
    
    
    
    GROUP BY P.ProdCodEstr, P.ProdNome, IRM.ItReqMatUnidMedCod
    order By P.ProdCodEstr Desc
    
    
    	Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	jan >0
    
    	Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	fev >0
    
    	Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	mar >0
    
    
    	Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	abr >0
    		
    
    	Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	mai >0
    
    	Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	jun >0
    
    
    	Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	jul >0
    
    
    Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	ago >0
    
    
    Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	setem >0
    
    	
    Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	Outub > 0
    
    
    Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	nov >0
    
    Update
    	ItensConsumoProducao
    	Set
    	QtdMes = QtdMes +1
    	Where
    	dez >0
    
    
    Select *,
    Media = TotalMes/QtdMes
    
    From        
    	ItensConsumoProducao
    	
    
    Drop  Table ItensConsumoProducao
    

    segunda-feira, 28 de março de 2016 17:17

Respostas

Todas as Respostas

  • Leandro,

    Acredito que você pode utilizar a função nativa do SQL Server chamada DATEDIFF para calcular quantos meses foram passados como parâmetro. Dê uma olhada na documentação desta função no link abaixo:

    https://msdn.microsoft.com/pt-br/library/ms189794%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396

    Você consegue nos informar por gentileza qual dos campos/valores você gostaria de comparar na sua consulta de origem? Pois na cláusula WHERE da sua consulta você utiliza vários filtros. Seria legal também um exemplo do que exatamente você quer para conseguirmos te ajudar melhor.

    Espero ter ajudado..


    Felipe Lauffer
    MCSA: SQL Server | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]


    • Marcado como Resposta Marcos SJ segunda-feira, 28 de março de 2016 19:27
    segunda-feira, 28 de março de 2016 18:43
  • Boa tarde,

    Felipe!

    Eu usei a função Datediff porém não estou conseguindo colocar na Query pois está convertido pois preciso passar no parâmetro de data somente os meses no seguinte formato exemplo: 01/2015 até 12/2015 daí preciso extrair a quantidade de meses no período, se eu não converter consigo o resultado porém preciso passar os parâmetro desta forma, se puder ajudar agradeço,

    modifiquei e desta forma retorna o valor que preciso porém como indiquei o formato passado no parâmetro precisa ser Mes e Ano exemplo: 01/2015

    Obrigado,

    DECLARE @DifDataIn as datetime, @DifDataFi as datetime
    SET @DifDataIn = '20150301'
    SET @DifDataFi = '20151130'
    
    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),
       --   QtdMes = 0,
         ContagemMes =   DATEDIFF(Month, @DifDataIn, @DifDataFi)+ 1
        
          
        
                        Into ItensConsumoProducao
                        
    From ITEM_REQ_MAT IRM,
    	 Produto P  With(NoLock)
    	
    Where 
            P.ProdCodEstr = IRM.ProdCodEstr
    AND	 IRM.ItReqMatAtendData  >= @DifDataIn
    AND	 IRM.ItReqMatAtendData <= @DifDataFi
    AND	(P.ProdCodEstr >= '13.03.0298' And P.ProdCodEstr <= '13.03.0298')
    
    
    
    GROUP BY P.ProdCodEstr, P.ProdNome, IRM.ItReqMatUnidMedCod
    order By P.ProdCodEstr Desc
    

    segunda-feira, 28 de março de 2016 19:42