Ir para conteúdo
diegoamferreira

Coluna Acumulativa Banco de Dados SQL

Recommended Posts

Bom dia,

 

Por entender um pouco e gostar muito de programação estou ajudando um amigo a programar algumas consultas sql para retornar KPI's de sua empresa no RM da TOTVS.

 

Estou travado em uma questão que é adicionar uma coluna de soma acumulativa dos valores totais.

 

hoje ja tenho a consulta funcionando retornando os valores de venda de cada vendedor:

 

A3_NOME                                           TOTAL
DIEGO AUGUSTO                               158641,36
LUCAS VERGANI                               153615,69
RODRIGO GUEDES                            103330,38
FERNANDA SILVESTRE                    71695,48
ADRIANO PAIVA                                916,5

 

Para trazer esse resultado minha consulta agrupa todos os pedidos de venda, encontra os vendedores e soma o valor total.

 

SELECT
 A3_NOME
,SUM(C6_VALOR) TOTAL
 
 FROM SC6010
INNER JOIN SC5010 WITH(NOLOCK) ON C5_FILIAL= C6_FILIAL AND C5_NUM = C6_NUM 
INNER JOIN SE4010 WITH(NOLOCK) ON C5_CONDPAG = E4_CODIGO AND SE4010.D_E_L_E_T_ = ' ' 
INNER JOIN SA1010 WITH(NOLOCK) ON C5_CLIENTE = A1_COD AND C5_LOJACLI = A1_LOJA
INNER JOIN SA3010 WITH(NOLOCK) ON A3_COD = C5_VEND1
INNER JOIN SB1010 WITH(NOLOCK) ON C6_PRODUTO = B1_COD 
LEFT JOIN SBM010 WITH(NOLOCK) ON B1_GRUPO = BM_GRUPO AND SBM010.D_E_L_E_T_ = ' '
LEFT JOIN SF4010 WITH(NOLOCK) ON C6_TES = F4_CODIGO AND SF4010.D_E_L_E_T_ = ' ' AND C6_FILIAL = F4_FILIAL
JOIN AOV010 AOV WITH(NOLOCK) ON AOV.AOV_CODSEG = A1_CODSEG and AOV.D_E_L_E_T_ = ' ' 
WHERE SC6010.D_E_L_E_T_ = ' '
AND SC5010.D_E_L_E_T_ = ' '
AND SA1010.D_E_L_E_T_ = ' '
AND SB1010.D_E_L_E_T_ = ' '
and SA3010.D_E_L_E_T_ = ' '
AND E4_DESCRI NOT IN ('BONIFICACAO', 'TROCA', 'BONIFICAÇÃO', 'OUTROS')
and F4_TEXTO LIKE '%VENDA%'
AND C5_LIBEROK = 'S'
AND MONTH(SC5010.C5_EMISSAO) = MONTH(DATEADD(MONTH,-1,GETDATE()))
AND YEAR(SC5010.C5_EMISSAO) = YEAR(DATEADD(MONTH,-1,GETDATE()))

GROUP BY A3_NOME
ORDER BY SUM(C6_VALOR) DESC

 

Porém o que preciso seria um resultado assim:


A3_NOME                                           TOTAL                              ACUMULADO
MARCIO AUGUSTO                          158641,36                       158641,36
JOAO PEREIRA                                 153615,69                        312257,05
RODRIGO SANTOS                           103330,38                        415587,43  
FERNANDA CARDOSO                     71695,48                          487282,91
CLEBER  PAIVA                                 916,5                                 488199,41

 

 

Não domino muito, o que sei aprendi pesquisando, encontrei formas de fazer isso em outros tópicos, porém nenhum deles tinha outro agrupamento na consulta.

 

Obrigado.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use o OVER()

 

Veja um exemplo para Sql Server aqui

 

C. Gerando uma média móvel e o total cumulativo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por stewartcintra@
      Tenho um sistema de contas em php mysql, preciso exibir todas as contas do mes agrupadas por categoria e o campo valorR$ para saber o total em reais de cada categoria.
      Não estou conseguindo, como posso fazer isso?
    • Por MateusDuarte
      Podem me ajudar? Sou novato em PHP e estou precisando de uma ajudinha.
      Tenho 2 tabelas no banco: filmes e generos.
      Faço o cadastro individual de todos os generos na tabela generos, e no cadastro de filmes eu puxo todos os generos por um multiple select. Até ai tudo certo, ele salva no banco de dados assim:
      genero1, genero2, genero3.
       
      Porém na hora de mostrar eu não sei separar eles das virgulas.
      Segue meu SELECT simples:
      <main class="content"> <?php $sql = "SELECT * FROM genero ORDER BY RAND()"; $result = $connect->query($sql); if($result->num_rows > 0) { while($row = $result->fetch_assoc()) { $teste = $row["id_genero"]; ?> <section class="panel"> <h2><a id="links-generos" href="generos-filmes.php?id=<?php echo $row['id_genero'];?>"><?php echo $row["descricao"];?></a></h2> <div class="recentslider"> <div class="swiper-container"> <div class="swiper-wrapper"> <?php $sql_t = "SELECT * FROM filmes WHERE id_genero = ".$teste." ORDER BY RAND()"; $result_t = $connect->query($sql_t); if($result_t->num_rows > 0) { while($row_t = $result_t->fetch_assoc()) { ?> <div class="swiper-slide"><?php echo "<a href='single-filmes.php?id=".$row_t['id_filme']."&genero=".$row_t['id_genero']."';>";?><img src="capa/<?php echo $row_t["capa_filme"];?>"><h3 class="hometitle"><?php echo $row_t["titulo_filme"];?></h3></a></div> <?php }} else { echo "0 results"; } ?> </div> <div class="nextdirection recent-next"><img src="img/right-arrow.svg"> </div> <div class="leftdirection recent-prev"><img src="img/left-arrow.svg"> </div> </div> </div> </section> <?php }} else { echo "0 results"; } ?> </main> (Desculpa se não ficou alinhado, só copiei e colei.)

      Reparem que primeiro dou um select na tabela genero, e salvo o ID dela em uma variavel, e depois vou um select na tabela filmes usando a variavel que salvei antes como uma condição.
      Porem na tabela filmes, os generos estão salvos separados por virgula. Como consigo fazer um select separando ela das virgulas?
       
    • Por GustavoJacob15
      Quando eu executo esse fonte, trás o resultado triplicado
       
       
       
      SELECT CN9_NUMERO AS 'CONTRATO', CONVERT(DATE, SUBSTRING(CN9_DTINIC, 1, 4) + '-' + SUBSTRING(CN9_DTINIC, 5, 2) + '-' + SUBSTRING(CN9_DTINIC, 7, 2)) AS 'DT INICIO', CONVERT(DATE, SUBSTRING(CN9_DTFIM, 1, 4) + '-' + SUBSTRING(CN9_DTFIM, 5, 2) + '-' + SUBSTRING(CN9_DTFIM, 7, 2)) AS 'DT FIM', CN9_NUMERO AS 'CENTRO DE CUSTO', CN9_ZZEMTI AS 'ART EMITIDA', CONVERT(DATE,CN9_ZZDTVA) AS 'VALIDADE DA ART', CN9_VLATU AS 'VALOR CONTRATO', CNC_CLIENT AS 'CLIENTE', CNC_LOJACL AS 'LOJA CLIENTE', A1_NOME AS 'NOME CLIENTE', CNE_PEDIDO AS 'PEDIDO', CNE_PERC AS 'PERCENTUAL', C6_NOTA AS 'NOTA FISCAL', E1_NUM AS 'NUMERO', CNE_REVISA, CONVERT(DATE,E1_BAIXA) AS 'DT BAIXA', CNF_VLPREV AS 'VALOR PREVISTO', CNF_PARCEL AS 'PARCELA', CONVERT(DATE,CNF_DTVENC) AS 'VENCIMENTO' FROM CN9010 CN9 INNER JOIN CNC010 CNC ON CNC.CNC_NUMERO = CN9.CN9_NUMERO AND CNC.D_E_L_E_T_ ='' INNER JOIN SA1010 A1 ON CNC.CNC_CLIENT = A1.A1_COD AND CNC.CNC_LOJACL = A1.A1_LOJA AND A1.D_E_L_E_T_ ='' INNER JOIN CNF010 CNF ON CNF.CNF_CONTRA = CN9.CN9_NUMERO AND CN9.D_E_L_E_T_='' INNER JOIN CNE010 CNE ON CNE.CNE_CONTRA = CNF.CNF_CONTRA AND CNE.D_E_L_E_T_='' INNER JOIN SC6010 C6 ON C6.C6_NUM = CNE.CNE_PEDIDO AND C6.D_E_L_E_T_ ='' INNER JOIN SE1010 E1 ON E1.E1_NUM = C6.C6_NOTA AND E1.D_E_L_E_T_ ='' AND E1.E1_TIPO ='NF' WHERE CN9.D_E_L_E_T_='' AND CN9_NUMERO = '201000272' AND CN9_REVISA = '002' AND CN9.D_E_L_E_T_='' AND CNF_CONTRA = '201000272' AND CNF_REVISA = '002' AND CNF.D_E_L_E_T_='' AND CNE_CONTRA = '201000272' AND CNE_REVISA = '002' AND CNE.D_E_L_E_T_='' AND E1_PREFIXO = 'SRV' AND CNC_NUMERO = '201000272' AND CNC_REVISA = '002' GROUP BY CN9_NUMERO,CN9_REVISA,CN9_DTINIC,CN9_DTFIM,CN9_NUMERO,CN9_ZZEMTI,CN9_ZZDTVA,CN9_VLATU,CNC_CLIENT,CNC_LOJACL, A1_NOME, CNE_PEDIDO, CNE_PERC, C6_NOTA, E1_NUM, CNE_REVISA, E1_BAIXA, CNF_VLPREV, CNF_PARCEL, CNF_DTVENC  
    • Por luisfeliperm2
      Quero selecionar 10 noticias do banco de dados, irei utilizar paginação, então na próxima pagina será selecionada da 11-20, 21-30. Só que em todos esses select eu quero que venha a noticia principal que é definida pela coluna "destaque".  O motivo é que eu não quero usar 2 select pra buscar noticias.
      Pra ser bem resumido, eu quero selecionar a noticia principal e depois selecionar mais 10 que podem ser qualquer uma
       
      Tentei da seguinte forma:
      select * from news where destaque = true UNION select * from news ORDER BY id DESC LIMIT 10 OFFSET 1;
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.