Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

felipebmfaria

Subtotal e total_geral (GROUP BY)

Recommended Posts

Boa tarde,

 

Estou precisando listar os vencimentos, com o somatório e separados por obra.

 

O problema é que não exibe todos os itens da lista de acordo com o filtro, exibe apenas o total de cada obra.

Eu preciso de algo mais ou menos assim:
Obra 1
Item 1 R$ 200,00
Item 2 R$ 200,00
Subtotal = 400,00
Obra 2
Item 1 R$ 100,00
Item 2 R$ 130,00
Subtotal = 230,00
Total Geral = 630,00
Se alguém puder me ajudar.

 

 

Quase consegui com a seguinte consulta:

SELECT 
   codigo_vencimento, data_vencimento_vencimento, codigo_centro_custo_vencimento, sum(valor_total_vencimento) AS total_por_obra 
FROM 
   vencimento
WHERE
   data_vencimento_vencimento BETWEEN '2014-06-25' AND '2014-06-25'
GROUP BY
   codigo_centro_custo_vencimento WITH rollup

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque no select apenas os campos wue wuer agrupar e use o rollup ....

 

 

Mas ....

 

 

O e exemplo tem obra e item e o select vencimento e dsta !!??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leia-se Obra como Centro Custo e Item como Vencimento.


Motta, tentei do jeito que voce falou, mas continua exibindo a lista resumida, ou seja, somente com o subtotal de cada centro de custo(Obra). Eu precisava da lista descriminada, com todos os vencimento(itens) daquele centro de custo(Obra) e logo abaixo o somatório por obra.

Compartilhar este post


Link para o post
Compartilhar em outros sites


SELECT

codigo_vencimento,

data_vencimento_vencimento,

codigo_centro_custo_vencimento,

sum(valor_total_vencimento) AS total_por_obra

FROM

vencimento

WHERE

data_vencimento_vencimento BETWEEN '2014-06-25' AND '2014-06-25'

GROUP BY

codigo_vencimento,

data_vencimento_vencimento,

codigo_centro_custo_vencimento

WITH rollup

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa a demora para responder, andei adoentado e não pude mexer.

 

Então, desse jeito que você postou, Motta, faz o somatório corretamente, mas os vencimentos são exibidos duplicados. Tem idéia do porque?

 

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites
mas os vencimentos são exibidos duplicados. Tem idéia do porque?

 

 

Duplicados como ?

 

O campo data_vencimento_vencimento tem a hora gravada internamente ? Tente a function DATE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja como fica no banco.

 

codigo_vencimento data_vencimento_vencimento codigo_centro_custo_vencimento sum(valor_total_vencimento)

15 2014-06-25 2 282.64

15 2014-06-25 NULL 282.64

15 NULL NULL 282.64

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não , está certo quando se usa rollup o MySql totaliza todas as colunas , as linhas que tem 'null' são totalizações das demais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, primeiro muito obrigado pela força.

 

Decidi refazer a modelagem do banco para acertar algumas coisas e assim que finalizar volto no tópico, pois ainda não consegui exibir do jeito que precisava. Está exibindo tudo junto. Preciso pensar em como formatar a saída para, por exemplo, dar um salto de linha depois do subtotal de cada OBRA.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duplica o registro anterior pois você agrupou por codigo_vencimento e data_vencimento_vencimento, repetindo deste modo você identifica que aquele é o subtotal da data_vencimento_vencimento e o subtotal do codigo_vencimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, amigo.

 

Não sei como duplicar o registro anterior.

 

Coloquei para agrupar por 'codigo_centro_de_custo_vencimento' e 'codigo_vencimento' e observei que o resultado ficou mais próximo do que preciso.

 

Ainda não encontrei uma forma de diferenciar o subtotal dos itens e do total geral. Tentei uma condicao com NULL mas o null aparece somente no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu post inicial vc pedia como totalizar, isto se faz com o rollup, as colunas totalizadas aparecem como null, não entendo o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

estou com problemas para diferenciar o que é item, o que é subtotal e o que é total geral.

Tentei diferenciar atraves do 'null' que aparece quando faço uma consulta direto no SGBD, mas quando uso a comparacao no PHP ele nao retorna nada.

 

Como faço para diferenciar o que é subtotal, o que é item e o que é total geral?

Não sei se seria o caso de mover o tópico para PHP.

 

Lembrando que eu precisaria exibir mais ou menos como descrevi no post inicial:

 

Obra 1
Item 1 R$ 200,00
Item 2 R$ 200,00
...
Subtotal = 400,00
Obra 2
Item 1 R$ 100,00
Item 2 R$ 130,00
...
Subtotal = 230,00
Total Geral = 630,00
grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja como fica no banco.

 

codigo_vencimento data_vencimento_vencimento codigo_centro_custo_vencimento sum(valor_total_vencimento)

15 2014-06-25 2 282.64

15 2014-06-25 NULL 282.64

15 NULL NULL 282.64

 

O NULL significa que é o subtotal:

  1. Na primeira linha é o total do codigo_vencimento 15, data_vencimento_vencimento 2014-06-25 e codigo_centro_custo_vencimento 2
  2. Na segunda linha é o total de todos os itens da data_vencimento_vencimento, como existe apenas um registro no codigo_centro_custo_vencimento, o valor é igual (inseriu outro item para testar?)
  3. Na terceira linha é o total de todos os itens de codigo_vencimento, ou seja, todos os totais de data_vencimento_vencimento

Espero ter esclarecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é exatamente isto, fica estranho pois só tem uma linha de detalhe com mais de uma talvez fique melhor

 

outra solução é tirar o ROLLUP e montar o total no fornt-end somando os valores a vantagem do ROLLUP é poupar esta montagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução que consegui foi a seguinte:

 

Faço primeira uma consulta para exibir somente os itens agrupados por centro de custo(obra).

Depois faço uma outra consulta para exibir somente o subtotal de cada centro de custo.

E para mostrar o total geral peguei o somatorio total dos itens.

 

Ficou mais ou menos assim:

 

Item 1 R$ 200,00 - Obra 1
Item 2 R$ 200,00 - Obra 1
Item 3 R$ 100,00 - Obra 2
Item 4 R$ 130,00 - Obra 2
Subtotal por obra
Obra 1 - R$ 400,00
Obra 2 - R$ 230,00
Total Geral
R$ 630,00
Para "pegar" o "subtotal" por centro_de_custo usei um sum(valor_total_vencimento) e depois um group_by por codigo_centro_de_custo
Para pegar o "total geral" usei array_sum, função nativa do PHP.
[RESOLVIDO]
Muito obrigado pela força, Motta e lokaodomau.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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