Subtotales por grupos

Tengo una tabla en mysql que tiene nom_cte|qty|monto| y estoy mostrando en la pantalla el detalle por cliente (hasta aquí sin problema), el problema radica en que despues del detalle quiero que aparezca el subtotal por ese cliente y despues el detalle del siguiente cliente.
             Cliente|Cantidad|Monto
                 1 10 150
                 1 5 30
                 1 8 20
Subtotal 1 23 200

1 respuesta

Respuesta
1
La solución a este problema consiste en realizar dos consultas distintas: la de detalle y la que totaliza por cliente. Vas mostrando el detalle hasta que cambie de cliente y entonces muestras la fila siguiente de la consulta de totales.
Por ejemplo:
$detalle = mysql_query("SELECT nom_cte, qty, monto FROM tutabla ORDER BY nom_cte ASC");
$totales = mysql_query("SELECT nom_cte, SUM(qty) AS cant, SUM(Monto) AS total FROM tutabla GROUP BY nom_cte ORDER BY nom_cte ASC");
David,
Gracias por la pronta y acertada respuesta, ya intente lo que me comentas y tengo los dos resultados, ahora mi problema es en que parte del script los pongo, espero que me puedas ayudar con esto.
Te anexo el scrip que tengo hasta ahora y que es la consulta detalle
$consulta=mysql_query("SELECT * FROM tblproductos RIGHT JOIN $tabla ON modelo = model ORDER BY ship_to_name, model");
while($row = mysql_fetch_array($consulta)){
$ship=$row["ship_to_name"];
$usermodel=$row["model"];
$pcmodel=$row["modelo"];
$qty=number_format($row["order_qty"],0);
$t_qty=number_format($row["tot_qty"],0);
$largo=$row["Largo"];
$ancho=$row["Ancho"];
$alto=$row["Alto"];
$tot_amt=number_format($row["net_amt_txn"],2);
$vol=number_format(($largo*$ancho*$alto)*$qty,2);
$piso=number_format($vol/47,2);
$granel=number_format($vol/95,2);
echo("
<table border='0' width='100%'cellspacing='0' cellpadding='0'>
\n");
echo("
<tr>
\n");
echo("
<td width='34%'>
<p align='left'><b><font face='Tahoma' size='1'>$ship</font></b></td>
\n");
echo("
<td width='13%'>
<p align='left'><b><font face='Tahoma' size='1'>$usermodel</font></b></td>
\n");
echo("
<td width='13%'>
<p align='left'><b><font face='Tahoma' size='1'color='#CCOOOO'>$pcmodel</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$qty</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$tot_amt</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$vol</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$piso</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$granel</font></b></td>
\n");
echo("
</tr>
\n");
echo("
</table>
\n");
}
De nuevo, gracias por tu ayuda
Te propongo usar lo que ya tienes para aprovecharlo. Algo como esto:
<?php
$consulta=mysql_query("SELECT * FROM tblproductos RIGHT JOIN $tabla ON modelo = model ORDER BY ship_to_name, model");
$totales=mysql_query("SELECT shipt_to_name, SUM(order_qty) AS sumorder, SUM(tot_qty) AS total FROM tblproductos RIGHT JOIN $tabla ON modelo = model GROUP BY ship_to_name ORDER BY ship_to_name");
$ship='';
while($row = mysql_fetch_array($consulta)){
if ($ship > '' && $ship <> $row["ship_to_name"]) {
$sub = mysql_fetch_array($totales);
echo "
<table>
<tr>
<td>$sub[ship_to_name]</td>
<td>$sub[sumorder]</td>
<td>$sub[total]</td>
</tr>
</table>
";
}
$ship=$row["ship_to_name"];
$usermodel=$row["model"];
$pcmodel=$row["modelo"];
$qty=number_format($row["order_qty"],0);
$t_qty=number_format($row["tot_qty"],0);
$largo=$row["Largo"];
$ancho=$row["Ancho"];
$alto=$row["Alto"];
$tot_amt=number_format($row["net_amt_txn"],2);
$vol=number_format(($largo*$ancho*$alto)*$qty,2);
$piso=number_format($vol/47,2);
$granel=number_format($vol/95,2);
echo("
<table border='0' width='100%'cellspacing='0' cellpadding='0'>
\n");
echo("
<tr>
\n");
echo("
<td width='34%'>
<p align='left'><b><font face='Tahoma' size='1'>$ship</font></b></td>
\n");
echo("
<td width='13%'>
<p align='left'><b><font face='Tahoma' size='1'>$usermodel</font></b></td>
\n");
echo("
<td width='13%'>
<p align='left'><b><font face='Tahoma' size='1'color='#CCOOOO'>$pcmodel</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$qty</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$tot_amt</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$vol</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$piso</font></b></td>
\n");
echo("
<td width='8%'>
<p align='right'><b><font face='Tahoma' size='1'>$granel</font></b></td>
\n");
echo("
</tr>
\n");
echo("
</table>
\n");
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas