none
Quebrando Por grupo RRS feed

  • Pergunta

  • Prezados bom dia, tenho a SQL abaixo que me retorna as informaçoea que preciso, porem eu gostaria que no final de casa grupo fosse feito a soma.

    vejam

    SQL

     
    Select
       FLAN.CODTB1FLX,
       FTB1.DESCRICAO,
       TotalAnoAnterior  = Sum(Case When (Year(DataBaixa) = Year(GetDate()) - 1) Then IsNull(ValorBaixado, 0) End),
       Janeiro      = Sum(Case When (Month(DataBaixa) = 1)  and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Fevereiro    = Sum(Case When (Month(DataBaixa) = 2)  and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Março        = Sum(Case When (Month(DataBaixa) = 3)  and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Abril        = Sum(Case When (Month(DataBaixa) = 4)  and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Maio         = Sum(Case When (Month(DataBaixa) = 5)  and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Junho        = Sum(Case When (Month(DataBaixa) = 6)  and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Julho        = Sum(Case When (Month(DataBaixa) = 7)  and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Agosto       = Sum(Case When (Month(DataBaixa) = 8)  and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Setembro     = Sum(Case When (Month(DataBaixa) = 9)  and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Outubro      = Sum(Case When (Month(DataBaixa) = 10) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Novembro     = Sum(Case When (Month(DataBaixa) = 11) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       Dezembro     = Sum(Case When (Month(DataBaixa) = 12) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
       TotalGeral   = Sum(Case When (Year(DataBaixa) = Year(GetDate()) ) Then IsNull(ValorBaixado, 0) End)
    FROM FLAN
    INNER JOIN FTB1 ON  FTB1.CODCOLIGADA = FLAN.CODCOLIGADA AND FTB1.CODTB1FLX = FLAN.CODTB1FLX
    WHERE  FLAN.CODCOLIGADA= '1'
    GROUP BY  FLAN.CODTB1FLX,FTB1.DESCRICAO
    ORDER BY 1

     

    Resultado

    1.01.030    Encargos Sociais - SENAI
    1.01.031    Ginastica Laboral
    1.02.001    Materiais Aplicados em Obras
    1.02.002    Ferramentas Rapido Desgaste
    1.02.003    Materiais p/Serviços Diversos
    1.02.004    Materiais de construção - SPE
    1.03.001    Serv Prestado Pessoa Fisica

     

    Resultado esperado

    1.01.030    Encargos Sociais - SENAI
    1.01.031    Ginastica Laboral

    Soma

    1.02.001    Materiais Aplicados em Obras
    1.02.002    Ferramentas Rapido Desgaste
    1.02.003    Materiais p/Serviços Diversos
    1.02.004    Materiais de construção - SPE

    Soma

    1.03.001    Serv Prestado Pessoa Fisica

     

    E no grupo 2 a mesma quebra.

    2.01.001


    2.04.002

    2.05.001

     

    Sera que possivel.

    Obrigado a todos pela ajuda..

    terça-feira, 5 de julho de 2011 13:15

Respostas

  • Ronnie,

    Se eu entendi direito o que você quer, acho que vai dar certo.

    Tenta assim:

    Select
      substring(FLAN.CODTB1FLX,1,4),
      FLAN.CODTB1FLX,
      FTB1.DESCRICAO,
      TotalAnoAnterior = Sum(Case When (Year(DataBaixa) = Year(GetDate()) - 1) Then IsNull(ValorBaixado, 0) End),
      Janeiro   = Sum(Case When (Month(DataBaixa) = 1) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Fevereiro  = Sum(Case When (Month(DataBaixa) = 2) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Março    = Sum(Case When (Month(DataBaixa) = 3) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Abril    = Sum(Case When (Month(DataBaixa) = 4) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Maio     = Sum(Case When (Month(DataBaixa) = 5) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Junho    = Sum(Case When (Month(DataBaixa) = 6) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Julho    = Sum(Case When (Month(DataBaixa) = 7) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Agosto    = Sum(Case When (Month(DataBaixa) = 8) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Setembro   = Sum(Case When (Month(DataBaixa) = 9) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Outubro   = Sum(Case When (Month(DataBaixa) = 10) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Novembro   = Sum(Case When (Month(DataBaixa) = 11) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Dezembro   = Sum(Case When (Month(DataBaixa) = 12) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      TotalGeral  = Sum(Case When (Year(DataBaixa) = Year(GetDate()) ) Then IsNull(ValorBaixado, 0) End)
    FROM FLAN
    INNER JOIN FTB1 ON FTB1.CODCOLIGADA = FLAN.CODCOLIGADA AND FTB1.CODTB1FLX = FLAN.CODTB1FLX
    WHERE FLAN.CODCOLIGADA= '1'
    GROUP BY substring(FLAN.CODTB1FLX,1,4),FLAN.CODTB1FLX,FTB1.DESCRICAO
    ORDER BY 1
    

    Att,


    Fredy Esmeraldo
    Microsoft MCP, MCTS, MCITP Database Administrator 2008
    Visite o meu blog: http://fredyesmeraldo.wordpress.com
    Me siga no twitter: @fredyesmeraldo
    LinkedIN: Fredy Esmeraldo
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    • Marcado como Resposta Ronnie Von terça-feira, 5 de julho de 2011 14:44
    terça-feira, 5 de julho de 2011 13:25
  • O Rollup soma pelo agrupamento.

    Pra fazer o que você quer, seria necessário tirar algumas colunas para somar pelo agrupamento correto.

    Mais ou menos assim:

    Select
      substring(FLAN.CODTB1FLX,1,4),
      TotalAnoAnterior = Sum(Case When (Year(DataBaixa) = Year(GetDate()) - 1) Then IsNull(ValorBaixado, 0) End),
      Janeiro   = Sum(Case When (Month(DataBaixa) = 1) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Fevereiro  = Sum(Case When (Month(DataBaixa) = 2) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Março    = Sum(Case When (Month(DataBaixa) = 3) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Abril    = Sum(Case When (Month(DataBaixa) = 4) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Maio     = Sum(Case When (Month(DataBaixa) = 5) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Junho    = Sum(Case When (Month(DataBaixa) = 6) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Julho    = Sum(Case When (Month(DataBaixa) = 7) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Agosto    = Sum(Case When (Month(DataBaixa) = 8) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Setembro   = Sum(Case When (Month(DataBaixa) = 9) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Outubro   = Sum(Case When (Month(DataBaixa) = 10) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Novembro   = Sum(Case When (Month(DataBaixa) = 11) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Dezembro   = Sum(Case When (Month(DataBaixa) = 12) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      TotalGeral  = Sum(Case When (Year(DataBaixa) = Year(GetDate()) ) Then IsNull(ValorBaixado, 0) End)
    FROM FLAN
    INNER JOIN FTB1 ON FTB1.CODCOLIGADA = FLAN.CODCOLIGADA AND FTB1.CODTB1FLX = FLAN.CODTB1FLX
    WHERE FLAN.CODCOLIGADA= '1'
    GROUP BY substring(FLAN.CODTB1FLX,1,4)
    WITH ROLLUP
    ORDER BY 1
    

    Aí a partir dessa você faz um join ou um CTE e monta a sua query com o restante das colunas.

    Att,


    Fredy Esmeraldo
    Microsoft MCP, MCTS, MCITP Database Administrator 2008
    Visite o meu blog: http://fredyesmeraldo.wordpress.com
    Me siga no twitter: @fredyesmeraldo
    LinkedIN: Fredy Esmeraldo
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    • Marcado como Resposta Ronnie Von terça-feira, 5 de julho de 2011 14:44
    terça-feira, 5 de julho de 2011 14:22
  • Ola Fredy esta ficando show de bola, so uma duvida com a opção WITH ROLLUP ele soma linha por linha pensei  que que iria somar pelas Quebras.

    tipo

    Total grupo 1.01

     

    Total Grupo 1.02

    Entendeu.

     

    Obrigado


    • Marcado como Resposta Ronnie Von terça-feira, 5 de julho de 2011 14:44
    terça-feira, 5 de julho de 2011 14:12

Todas as Respostas

  • Ronnie,

    Se eu entendi direito o que você quer, acho que vai dar certo.

    Tenta assim:

    Select
      substring(FLAN.CODTB1FLX,1,4),
      FLAN.CODTB1FLX,
      FTB1.DESCRICAO,
      TotalAnoAnterior = Sum(Case When (Year(DataBaixa) = Year(GetDate()) - 1) Then IsNull(ValorBaixado, 0) End),
      Janeiro   = Sum(Case When (Month(DataBaixa) = 1) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Fevereiro  = Sum(Case When (Month(DataBaixa) = 2) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Março    = Sum(Case When (Month(DataBaixa) = 3) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Abril    = Sum(Case When (Month(DataBaixa) = 4) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Maio     = Sum(Case When (Month(DataBaixa) = 5) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Junho    = Sum(Case When (Month(DataBaixa) = 6) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Julho    = Sum(Case When (Month(DataBaixa) = 7) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Agosto    = Sum(Case When (Month(DataBaixa) = 8) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Setembro   = Sum(Case When (Month(DataBaixa) = 9) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Outubro   = Sum(Case When (Month(DataBaixa) = 10) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Novembro   = Sum(Case When (Month(DataBaixa) = 11) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Dezembro   = Sum(Case When (Month(DataBaixa) = 12) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      TotalGeral  = Sum(Case When (Year(DataBaixa) = Year(GetDate()) ) Then IsNull(ValorBaixado, 0) End)
    FROM FLAN
    INNER JOIN FTB1 ON FTB1.CODCOLIGADA = FLAN.CODCOLIGADA AND FTB1.CODTB1FLX = FLAN.CODTB1FLX
    WHERE FLAN.CODCOLIGADA= '1'
    GROUP BY substring(FLAN.CODTB1FLX,1,4),FLAN.CODTB1FLX,FTB1.DESCRICAO
    ORDER BY 1
    

    Att,


    Fredy Esmeraldo
    Microsoft MCP, MCTS, MCITP Database Administrator 2008
    Visite o meu blog: http://fredyesmeraldo.wordpress.com
    Me siga no twitter: @fredyesmeraldo
    LinkedIN: Fredy Esmeraldo
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    • Marcado como Resposta Ronnie Von terça-feira, 5 de julho de 2011 14:44
    terça-feira, 5 de julho de 2011 13:25
  • Pra fazer o somatório, esqueci do ROLLUP.

    Segue:

    Select
      substring(FLAN.CODTB1FLX,1,4),
      FLAN.CODTB1FLX,
      FTB1.DESCRICAO,
      TotalAnoAnterior = Sum(Case When (Year(DataBaixa) = Year(GetDate()) - 1) Then IsNull(ValorBaixado, 0) End),
      Janeiro   = Sum(Case When (Month(DataBaixa) = 1) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Fevereiro  = Sum(Case When (Month(DataBaixa) = 2) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Março    = Sum(Case When (Month(DataBaixa) = 3) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Abril    = Sum(Case When (Month(DataBaixa) = 4) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Maio     = Sum(Case When (Month(DataBaixa) = 5) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Junho    = Sum(Case When (Month(DataBaixa) = 6) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Julho    = Sum(Case When (Month(DataBaixa) = 7) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Agosto    = Sum(Case When (Month(DataBaixa) = 8) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Setembro   = Sum(Case When (Month(DataBaixa) = 9) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Outubro   = Sum(Case When (Month(DataBaixa) = 10) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Novembro   = Sum(Case When (Month(DataBaixa) = 11) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Dezembro   = Sum(Case When (Month(DataBaixa) = 12) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      TotalGeral  = Sum(Case When (Year(DataBaixa) = Year(GetDate()) ) Then IsNull(ValorBaixado, 0) End)
    FROM FLAN
    INNER JOIN FTB1 ON FTB1.CODCOLIGADA = FLAN.CODCOLIGADA AND FTB1.CODTB1FLX = FLAN.CODTB1FLX
    WHERE FLAN.CODCOLIGADA= '1'
    GROUP BY substring(FLAN.CODTB1FLX,1,4),FLAN.CODTB1FLX,FTB1.DESCRICAO
    WITH ROLLUP
    ORDER BY 1
    

    Att,


    Fredy Esmeraldo
    Microsoft MCP, MCTS, MCITP Database Administrator 2008
    Visite o meu blog: http://fredyesmeraldo.wordpress.com
    Me siga no twitter: @fredyesmeraldo
    LinkedIN: Fredy Esmeraldo
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    terça-feira, 5 de julho de 2011 13:33
  • Ola Fredy esta ficando show de bola, so uma duvida com a opção WITH ROLLUP ele soma linha por linha pensei  que que iria somar pelas Quebras.

    tipo

    Total grupo 1.01

     

    Total Grupo 1.02

    Entendeu.

     

    Obrigado


    • Marcado como Resposta Ronnie Von terça-feira, 5 de julho de 2011 14:44
    terça-feira, 5 de julho de 2011 14:12
  • O Rollup soma pelo agrupamento.

    Pra fazer o que você quer, seria necessário tirar algumas colunas para somar pelo agrupamento correto.

    Mais ou menos assim:

    Select
      substring(FLAN.CODTB1FLX,1,4),
      TotalAnoAnterior = Sum(Case When (Year(DataBaixa) = Year(GetDate()) - 1) Then IsNull(ValorBaixado, 0) End),
      Janeiro   = Sum(Case When (Month(DataBaixa) = 1) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Fevereiro  = Sum(Case When (Month(DataBaixa) = 2) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Março    = Sum(Case When (Month(DataBaixa) = 3) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Abril    = Sum(Case When (Month(DataBaixa) = 4) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Maio     = Sum(Case When (Month(DataBaixa) = 5) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Junho    = Sum(Case When (Month(DataBaixa) = 6) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Julho    = Sum(Case When (Month(DataBaixa) = 7) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Agosto    = Sum(Case When (Month(DataBaixa) = 8) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Setembro   = Sum(Case When (Month(DataBaixa) = 9) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Outubro   = Sum(Case When (Month(DataBaixa) = 10) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Novembro   = Sum(Case When (Month(DataBaixa) = 11) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      Dezembro   = Sum(Case When (Month(DataBaixa) = 12) and (Year(DataBaixa) = Year(GetDate())) Then IsNull(ValorBaixado, 0) End),
      TotalGeral  = Sum(Case When (Year(DataBaixa) = Year(GetDate()) ) Then IsNull(ValorBaixado, 0) End)
    FROM FLAN
    INNER JOIN FTB1 ON FTB1.CODCOLIGADA = FLAN.CODCOLIGADA AND FTB1.CODTB1FLX = FLAN.CODTB1FLX
    WHERE FLAN.CODCOLIGADA= '1'
    GROUP BY substring(FLAN.CODTB1FLX,1,4)
    WITH ROLLUP
    ORDER BY 1
    

    Aí a partir dessa você faz um join ou um CTE e monta a sua query com o restante das colunas.

    Att,


    Fredy Esmeraldo
    Microsoft MCP, MCTS, MCITP Database Administrator 2008
    Visite o meu blog: http://fredyesmeraldo.wordpress.com
    Me siga no twitter: @fredyesmeraldo
    LinkedIN: Fredy Esmeraldo
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    • Marcado como Resposta Ronnie Von terça-feira, 5 de julho de 2011 14:44
    terça-feira, 5 de julho de 2011 14:22
  • Fredy muitissimo obrigado , perfeito, conseguimos resolver. Parabens
    terça-feira, 5 de julho de 2011 14:45
  • Obrigado, Ronnie.

    Qualquer dúvida, estou à disposição.

    Att,


    Fredy Esmeraldo
    Microsoft MCP, MCTS, MCITP Database Administrator 2008
    Visite o meu blog: http://fredyesmeraldo.wordpress.com
    Me siga no twitter: @fredyesmeraldo
    LinkedIN: Fredy Esmeraldo
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**
    terça-feira, 5 de julho de 2011 14:49