none
Mostrando Sub Totais RRS feed

  • Pergunta

  • Tenho uma tabela que traz as seguintes informações. 

    ID |     CONTA                          |  VALOR            | GRUPO

     1  |  receitasvendasUN1           |  100,00            |  receitabruta
     2  |  receitasvendasUN2           |    70,00            |  receitabruta
     3  |  compramateriaprima1      |     20,00            |  materiaprima

     4  | saida impostos                  |    15,00            | Impostos


    Preciso trazer os subtotais abaixo de cada grupo, usando a soma anterior. 
    Por exemplo. 

    receitabruta - materiaprima ( abaixo de todo o grupo materiaprima )

    receitabruta - materiaprima - impostos ( abaixo do grupo impostos )

       


     
    terça-feira, 6 de agosto de 2019 17:36

Respostas

Todas as Respostas

  • Deleted
    terça-feira, 6 de agosto de 2019 17:49
  • William,

    Existe alguma relação ou hierarquia entre estes grupos?


    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]

    terça-feira, 6 de agosto de 2019 17:58
  • A Versão do SQL Server é o 2008 R
    terça-feira, 6 de agosto de 2019 18:13
  • Olá, não existe. 
    terça-feira, 6 de agosto de 2019 18:13
  • Deleted
    terça-feira, 6 de agosto de 2019 18:50
  • Deleted
    • Marcado como Resposta William_droops terça-feira, 6 de agosto de 2019 19:26
    terça-feira, 6 de agosto de 2019 19:15
  • Obrigado José DIz
    terça-feira, 6 de agosto de 2019 19:27
  • William,

    Pois bem, pensei em algo aqui, não sei se é isso que você precisa, pois sem qualquer nível hierarquico dos dados ou relacionamento mesmo que fosse um autorelacimento já ajudaria, neste caso, vamos meio que no escuro.

    Eu elaborei um exemplo com base na pequena massa de dados que você postou, veja abaixo para ser utilizado a partir do SQL Server 2012:

    Create Table Contas
    (Id Int Primary key Identity(1,1),
     Conta Varchar(20) Not Null,
     Valor Decimal(6,2) Not Null,
     Grupo Varchar(20) Not Null)
    Go
    
    Insert Into Contas (Conta, Valor, Grupo)
    Values ('receitasvendasUN1' , 100, 'receitabruta'),
                ('receitasvendasUN2',70, 'receitabruta'),
                ('compramateriaprima1', 20, 'materiaprima'),
                ('saida impostos', 15,'Impostos')
    Go
    
    -- Obtendo a somatória por grupo --
    ;With CTESomarPorGrupo (Id, Grupo, SomatoriaGrupo)
    As
    (
    Select Id, Grupo, Sum(Valor) Over (Partition By Grupo Order By Grupo Asc)
    From Contas
    Group By Id, Grupo, Valor
    ),
    -- Obtendo a somatoria parcial--
    CTESomatoriaGeral (Id, Nivel1, Nivel2, Grupo, SomatoriaParcial)
    As
    (
    Select Id,
               Lead(Id,1,0) Over (Order By Id Asc) As Nivel1,
               Lead(Id,2,0) Over (Order By Id Asc) As Nivel1,
               Grupo,
    		   Sum(SomatoriaGrupo) As SomatoriaGeral
    From CTESomarPorGrupo
    Group By Id, Grupo
    )
    -- Obtendo as somatorias gerais --
    Select Concat(CT.Grupo, ' - ',CT1.Grupo, ' - ', CT2.Grupo) As Grupos,
               CT1.SomatoriaParcial As Grupo1,
               CT2.SomatoriaParcial As Grupo2,
    		   (CT1.SomatoriaParcial+CT2.SomatoriaParcial) As 'Total Parcial',
    		   (Select Sum(Valor) From Contas) As 'Somatória Geral',
    		   (Select Sum(Valor)+CT1.SomatoriaParcial+CT2.SomatoriaParcial From Contas) As 'Somatória Geral Acumulado'
    From CTESomatoriaGeral CT Inner Join CTESomatoriaGeral CT1
    												On CT1.Id = CT.Nivel1
    											  Inner Join CTESomatoriaGeral CT2
    											   On CT2.Id = CT.Nivel2
    Order By CT.Id Desc
    Go

    Ressalto que este é um exemplo, um esboço de código que elaborei com base no meu entendimento, com certeza existem melhorias, ajustes e correções, mas acredito que possa ser útil de alguma forma.

    Podemos posteriormente pensar em evoluir isso para um Pivot, ou caso venha a ser necessário converter para uma View ou armazenar o resultado em outra tabela.

    Vou ajustar outro Código para você usar na sua versão!


    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]




    terça-feira, 6 de agosto de 2019 19:28
  • Deleted
    terça-feira, 6 de agosto de 2019 20:54