Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 rollupLeia-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.
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
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
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
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
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.
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.
Alguem tem uma ideia de como formatar a saida? Está exibindo tudo junto e os itens saem duplicados.
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.
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.
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.
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
>
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:
Espero ter esclarecido.
é 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
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.
É isso mesmo que o Motta citou.
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 !!??