Valor Aculativo
22/08/2012
0
Tenho uma query que me traz a quantidade, gostaria de ter uma coluna com o acumulativo da quantidade.
Como faço esse acumulativo?
DECLARE @MES AS INT = 8 , @ANO AS INT = 2012 , @ID_SEQ_OPERACAO AS INT = 1 , @FL_STATUS_OCORRENCIA AS CHAR(1) = 'S' SELECT MOTIVO.IDMOTIVO, MOTIVO.NOMMOTIVO, COUNT(*) AS TOTAL_OCORRENCIAS FROM OCORRENCIA (NOLOCK) AS OCORRENCIA INNER JOIN MOTIVO (NOLOCK) AS MOTIVO ON OCORRENCIA.IDMOTIVO = MOTIVO.IDMOTIVO WHERE DATEPART(m, OCORRENCIA.DTINCLUSAO) = @MES AND DATEPART(yyyy,OCORRENCIA.DTINCLUSAO) = @ANO (OCORRENCIA.FL_OCORRENCIA = @FLOCORRENCIA OR @FLOCORRENCIA IS NULL) GROUP BY MOTIVO.IDMOTIVO, MOTIVO.NOMMOTIVO
Resultado
IDMOTIVO NOMMOTIVO TOTAL_OCORRENCIAS
3 Reserva 5
8 Banco de Horas 4
9 Previdência 1
51 Reclamação 1
Resultado Pretendido
IDMOTIVO NOMMOTIVO TOTAL_OCORRENCIAS OCORRENCIA_ACUMULADA
3 Reserva 5 5
8 Banco de Horas 4 9
9 Previdência 1 10
51 Reclamação 1 11
Max
Posts
23/08/2012
Alex Lekao
Nao sei se seria a melhor opcao, mas voce podera usar uma subselect, basicamente igual a que vc estaria usando com apenas o count e uma igualdade entre as duas no where.
Acho que daria certo.
Abraco.
Alex
23/08/2012
Eduardo Gonçalves
SELECT MOTIVO.IDMOTIVO, MOTIVO.NOMMOTIVO, COUNT(*) AS TOTAL_OCORRENCIAS, X.TOTAL_GERAL FROM OCORRENCIA (NOLOCK) AS OCORRENCIA INNER JOIN MOTIVO (NOLOCK) AS MOTIVO ON OCORRENCIA.IDMOTIVO = MOTIVO.IDMOTIVO INNER JOIN (SELECT IDMOTIVO, COUNT(*) FROM MOTIVO GROUP BY IDMOTIVO) AS X ON (MOTIVO.IDMOTIVO = X.IDMOTIVO) WHERE DATEPART(m, OCORRENCIA.DTINCLUSAO) = @MES AND DATEPART(yyyy,OCORRENCIA.DTINCLUSAO) = @ANO (OCORRENCIA.FL_OCORRENCIA = @FLOCORRENCIA OR @FLOCORRENCIA IS NULL) GROUP BY MOTIVO.IDMOTIVO, MOTIVO.NOMMOTIVO
23/08/2012
Max
Não sei se era isso que você mencionou, mas consegui fazer assim. Mas acho que te muita repetição de código.
Tem alguma sugestão para customizar esse select?
INSERT INTO @TEMP_TOT_OCORRENCIA SELECT MOTIVO.ID_SEQ_MOTIVO,
COUNT(*) AS NM_TOTAL_OCORRENCIAS
FROM OCORRENCIA (NOLOCK) AS OCORRENCIA
INNER JOIN TB_SGA_MOTIVO (NOLOCK) AS MOTIVO ON OCORRENCIA.ID_SEQ_MOTIVO = MOTIVO.ID_SEQ_MOTIVO
WHERE DATEPART(m, OCORRENCIA.DT_INCLUSAO) = @MES AND
DATEPART(yyyy,OCORRENCIA.DT_INCLUSAO) = @ANO AND
OCORRENCIA.ID_SEQ_OPERACAO = @ID_SEQ_OPERACAO AND
(OCORRENCIA.FL_STATUS_OCORRENCIA = @FL_STATUS_OCORRENCIA OR @FL_STATUS_OCORRENCIA IS NULL)
GROUP BY MOTIVO.ID_SEQ_MOTIVO
INSERT INTO @TEMP_VLR_ACUMULATIVO SELECT COD, (SELECT sum (X.valor) FROM @TEMP_TOT_OCORRENCIA X WHERE x.cod <= Y.cod) FROM @TEMP_TOT_OCORRENCIA Y
SELECT MOTIVO.ID_SEQ_MOTIVO,
MOTIVO.ST_NOM_MOTIVO,
COUNT(*) AS NM_TOTAL_OCORRENCIAS,
TEMP.VALOR AS NM_TOTAL_OCORRENCIAS_ACUMULADO,
SUM(CASE WHEN OCORRENCIA.FL_SLA_ATENDIDA = 'N' THEN 1 ELSE 0 END) AS NM_QTDE_ATRASADAS,
SUM(CASE WHEN OCORRENCIA.FL_FCR = 'S' THEN 1 ELSE 0 END) AS NM_QTDE_FCR,
AVG(DATEDIFF(S,OCORRENCIA.DT_INCLUSAO, OCORRENCIA.DT_FINALIZACAO)) AS NM_TMR_SEG
FROM TB_SGA_OCORRENCIA (NOLOCK) AS OCORRENCIA
INNER JOIN TB_SGA_MOTIVO (NOLOCK) AS MOTIVO ON OCORRENCIA.ID_SEQ_MOTIVO = MOTIVO.ID_SEQ_MOTIVO
INNER JOIN @TEMP_VLR_ACUMULATIVO AS TEMP ON MOTIVO.ID_SEQ_MOTIVO = TEMP.COD
WHERE DATEPART(m, OCORRENCIA.DT_INCLUSAO) = @MES AND
DATEPART(yyyy,OCORRENCIA.DT_INCLUSAO) = @ANO AND
OCORRENCIA.ID_SEQ_OPERACAO = @ID_SEQ_OPERACAO AND
(OCORRENCIA.FL_STATUS_OCORRENCIA = @FL_STATUS_OCORRENCIA OR @FL_STATUS_OCORRENCIA IS NULL)
GROUP BY MOTIVO.ID_SEQ_MOTIVO,
MOTIVO.ST_NOM_MOTIVO,
TEMP.VALOR
Clique aqui para fazer login e interagir na Comunidade :)