Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho uma tabela pedidos com o campo forma de pagamento - formpag - ele é uma combox que o usuário escolhe se o pagamento vai ser em dinheiro ou ou depósito em banco, na hora de criar o pedido.
Nessa tabela também existe o campo total. O que necessito é buscar em uma consulta o total de todos os pedidos e mostrar separadamente na mesma consulta o total em dinheiro e em depósito.
$qr="SELECT dataped, formpag, total FROM tblpedidos GROUP BY MONTH(dataped)";
$sqli=mysqli_query($conn,$qr);
while($ln = mysqli_fetch_assoc($sqli)){}
Como faço para obter a soma de "total" quando? Exemplo:
JANEIRO quando formpag for dinheiro - total em dinheido - quando formpag for depósito - total em depósito.
JANEIRO total em dinheiro $ 100,00 - total em depósito $ 50,00. E assim por diante: FEVEREIRO, MARÇO e etc.
espero ter sido claro. Agradeço a atenção de todos.Motta, muito obrigado por sua atenção. Já tentei fazer com CASE mas me falta conhecimento. Vou dar uma olhada na dica que você passou e tentar resolver. Espero conseguir, caso contrário vou recorrer aqui novamente. Muito obrigado e boa noite!
Eu acredito que para resolver esse problema tenho que criar variáveis. Não sei como fazer. Abaixo tentarei mostrar o que necessito com mais clareza:
<?php
$qr="SELECT formpag, dataped, total,
(CASE WHEN [formpag] = 'dinheiro' THEN @d = SUM(total) ELSE 0 END)
(CASE WHEN [formpag] <> 'dinheiro' THEN @b = SUM(total) ELSE 0 END)
FROM tblpedidos
GROUP BY MONTH(dataped)";
$sqli=mysqli_query($conn,$qr);
while($ln = mysqli_fetch_assoc($sqli)){
$data = $ln['dataped'];
$d=$ln['@d']; //Aqui o total quando formpag for 'dinheiro'
$b=$ln['@b']; //Aqui o total quando formpag for diferente de 'dinheiro'
echo $data;
echo $d;
echo $b;
}
?>Creio ser esta a sql base
SELECT formpag,
dataped,
sum(total) total_geral,
sum(CASE WHEN [formpag] = 'dinheiro' THEN total ELSE 0 END) dinheiro,
sum(CASE WHEN [formpag] <> 'dinheiro' THEN total ELSE 0 END) outros
FROM tblpedidos
GROUP BY formpag, datapedQuando eu uso o CASE não me retorna nenhum resultado. Tentei fazer diversas modificações mas não obtive sucesso. Primeiro acho que dataped teria que ser representado por MONTH(dataped), mas mesmo assim não funcionou. Se eu obtivesse pelo menos o "total" da condição formpag='dinheiro', eu teria o outro resultado subtraindo total_geral menos o resultado obtido dessa condição.
Mas o ponto principal é que o CASE não me retorna nenhum resultado.
Resolvido Motta
Muito obrigado pela sua ajuda!
<?php
$qr="SELECT formpag,
dataped,
sum(total) total_geral,
SUM(CASE WHEN formpag <> 'Dinheiro' THEN total ELSE 0 END) banco,
SUM(CASE WHEN formpag = 'Dinheiro' THEN total ELSE 0 END) dinheiro
FROM tblpedidos
WHERE YEAR(dataped)=YEAR(NOW())
GROUP BY MONTH(dataped)";
$sqli=mysqli_query($conn,$qr);
while($ln = mysqli_fetch_assoc($sqli)){
$total_geral=$ln['total_geral'];
$dataped = $ln['dataped'];
$dinheiro=$ln['dinheiro'];
$banco=$ln['banco'];
echo utf8_encode(ucwords(strftime('%B, %Y', strtotime($dataped)))) . "<br>";
echo "Total: " . $total_geral . "<br>";
echo "Banco: " . $banco . "<br>";
echo "Dinheiro: " . $dinheiro . "<br><br>";
}
?>
Pelo que entendi você quer um pivot.
Padrãodo sql sever.
Usando CASE.