Foros del Web » Programando para Internet » PHP »

Sumar filas en una consulta sql

Estas en el tema de Sumar filas en una consulta sql en el foro de PHP en Foros del Web. Buenas Noches.. Compañeros Nuevamente una ayudita... Tengo el siguiente Query SELECT cod_suc, tip_recep , [001] AS INDIRECTO ,[002] AS DIRECTO ,[003] AS CORPORATIVO FROM ( ...
  #1 (permalink)  
Antiguo 15/06/2011, 21:47
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Sumar filas en una consulta sql

Buenas Noches..

Compañeros


Nuevamente una ayudita...

Tengo el siguiente Query

SELECT cod_suc, tip_recep , [001] AS INDIRECTO ,[002] AS DIRECTO ,[003] AS CORPORATIVO
FROM (
SELECT cod_grupo , cod_suc ,tip_recep, cat_dis , cat_dis AS 'TIPO_VENTA' , semana
FROM temporalGerente) AS temporal PIVOT ( COUNT(semana)
FOR TIPO_VENTA IN ([001],[002],[003]) )
AS pivotTable WHERE tip_recep IN ('PS','RP','WB','SN') AND
cod_suc IN ('230','103','219') AND cod_grupo = '100' ORDER BY
cod_suc ASC

Me arroja el siguiente resultado:


Código:
cod_suc                          tip_Recep            DIRECTO                   INDIRECTO              CORPORATIVO
103                          PS                             1                               10                             20
103                          RP                             2                               40                              60
104                          PS                             5                                 2                              4
104                          RP                             10                              8                              5

Quiero que me haga la suma de DIRECTO , INDIRECTO , CORPORATIVO por cada sucursal , el resultado que necesito es asi:

Código:
cod_suc                       tip_Recep            DIRECTO                 INDIRECTO            CORPORATIVO
103                          PS o RP                     3                     50                    80
104                          PS o RP                   15                     10                     9

Porque necesito solo una fila por cada cod_suc...

Gracias..


Última edición por informacionsys; 15/06/2011 a las 22:13
  #2 (permalink)  
Antiguo 16/06/2011, 00:00
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años
Puntos: 38
Respuesta: Sumar filas en una consulta sql

SELECT DISTINCT col1, (SELECT SUM(col2) FROM table1 WHERE col1 = table2.col1) AS suma1 , (SELECT SUM(col3) FROM table1 WHERE col1 = table2.col1) AS suma2 FROM table1 AS table2
  #3 (permalink)  
Antiguo 16/06/2011, 05:55
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Sumar filas en una consulta sql

Hola compañero

Gracias por su ayuda...

No se como agregar ese query dentro del que tengo :

SELECT cod_suc, tip_recep , [001] AS INDIRECTO ,[002] AS DIRECTO ,[003] AS CORPORATIVO
FROM (
SELECT cod_grupo , cod_suc ,tip_recep, cat_dis , cat_dis AS 'TIPO_VENTA' , semana
FROM temporalGerente) AS temporal PIVOT ( COUNT(semana)
FOR TIPO_VENTA IN ([001],[002],[003]) )
AS pivotTable WHERE tip_recep IN ('PS','RP','WB','SN') AND
cod_suc IN ('230','103','219') AND cod_grupo = '100' ORDER BY
cod_suc ASC

Este query cuenta la cantidad de registro 001 DIRECTO , 002 INDIRECTO, 003 CORPORATIVO
por cada tip_recep de cada cod_suc.. ahora quiero que dentro me haga la suma de los tip_recep DIRECTO , INDIRECTO Y CORPORATIVO
de cada sucursal..

Obteniendo el resultado asi:


Código:
cod_suc                       tip_Recep            DIRECTO                 INDIRECTO            CORPORATIVO
103                          PS o RP                     3                     50                    80
104                          PS o RP                   15                     10                     9





Muchas Gracias.
  #4 (permalink)  
Antiguo 16/06/2011, 07:17
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Respuesta: Sumar filas en una consulta sql

Podrías hacer lo siguiente:
Código PHP:
$resultado mysql_query($query);  //resultado de la consulta
$row mysql_fetch_assoc($resultado); //extraes el primer registro
$codigo $row['cod_suc'];  //asignas datos a variables
$directo $row['DIRECTO'];
$indirecto $row['INDIRECTO'];
$corp $row['CORPORATIVO'];

while (
$reg mysql_fetch_assoc)  //sigues sacando registros

     if (
$reg['cod_suc'] == $codigo)  //si los códigos son iguales sumas los valores
     
{
           
$directo += $reg['DIRECTO'];
           
$indirecto += $reg['INDIRECTO'];
           
$corp += $reg['CORPORATIVO'];
     }
     else {  
//si los códigos son distintos
            //imprimes registro 
            // (Aquí va el código para imprimir la fila usando las variables $codigo, $directo, $indirecto y $corp).
            
            // asignas nuevos datos
            
$codigo $reg['cod_suc']; 
            
$directo $reg['DIRECTO'];
            
$indirecto $reg['INDIRECTO'];
            
$corp $reg['CORPORATIVO'];
           
     }

Yo creo que esto te puede funcionar.
Mi única duda es si después de sacar el primer registro, al seguir sacando registros con el while, continuaría con el segundo registro o empezaría de nuevo. Pruébalo a ver como va, para ver los fallos que pueda tener el algoritmo.
  #5 (permalink)  
Antiguo 16/06/2011, 07:34
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Sumar filas en una consulta sql

Hola buenos Dias

Gracias compañero..

voy a probarlo...

Y le cuento como me fue con el codigo...

Muchas Gracias.....

Oiie amigo podrias mriar este foro , a ver que me dices.....

http://www.forosdelweb.com/f18/crear...-while-921899/


Gracias.
  #6 (permalink)  
Antiguo 16/06/2011, 08:07
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Sumar filas en una consulta sql

Hola amigo ..

Probe el codigo pero lo que pasa es que la consulta me trae varias filas por cada cod_suc y me crea las columnas de mi tabla html para cada fila , y no quiero eso , solo que me la cree una sola vez por cada cod_suc..

Amigo si quieres dame un email y le envio la estructura de como lo necesito.... por favor

Ayuda..... porque llevo mas de una semana en esto y no he encontrado la solucion , el problema es que tengo solo hoy para hacerlo...

por favor les pido su amable colaboracion..

Gracias.
  #7 (permalink)  
Antiguo 16/06/2011, 09:09
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Respuesta: Sumar filas en una consulta sql

Hola informacionsys.

Entendí desde un principio qué era lo que querías, y el código que te he puesto, si no tiene ningún error, hace eso. Sólo muestra una fila por cada código. Si te muestra más de una fila por cada código es que algo no has puesto como corresponde.
¿Puedes poner el código de como imprimes las filas de la tabla? A lo mejor es que no lo has colocado en el lugar que corresponde o no has utilizado las variables adecuadas.
La única duda que tenía era que si se quiere seguir sacando filas después de haber sacado una, continua con la segunda o empieza otra vez. Por lo demás, yo creo que te debería funcionar. Por lo menos la idea es esa.

Muéstrame el código para ver como lo has puesto y te comento.
  #8 (permalink)  
Antiguo 16/06/2011, 09:14
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: Sumar filas en una consulta sql

A ver we pruebale asi , no es un codigo probado , mas bien un pseudocodigo en php de la logica que se podria usar(una idea en si) para formar un arreglo bidimensional,le faltaria desarrollar la logica de tip_Recep como ahi te indico


Código PHP:
<?

$arreglo
=array();

while (
$row mysql_fetch_array($resultMYSQL_ASSOC)) {
    
    if (isset(
$arreglo[$row["cod_suc"]]["DIRECTO"])) {
        
$arreglo[$row["cod_suc"]]["DIRECTO"]+=$row["DIRECTO"];
    }
    else {
        
$arreglo[$row["cod_suc"]]["DIRECTO"]=$row["DIRECTO"];
    }
    
    if (isset(
$arreglo[$row["cod_suc"]]["INDIRECTO"])) {
        
$arreglo[$row["cod_suc"]]["INDIRECTO"]+=$row["INDIRECTO"];
    }
    else {
        
$arreglo[$row["cod_suc"]]["INDIRECTO"]=$row["INDIRECTO"];
    }
    
    if (isset(
$arreglo[$row["cod_suc"]]["INDIRECTO"])) {
        
$arreglo[$row["cod_suc"]]["CORPORATIVO"]+=$row["CORPORATIVO"];
    }
    else {
        
$arreglo[$row["cod_suc"]]["CORPORATIVO"]=$row["CORPORATIVO"];
    }
    
   
/*
   se necesita desarrollar la logica para tip_Recep ¿cuando y como se unen ps y rp?
   basicamente seria la mesma idea
   */
   
   
   
    
}
?>
<table>

<?
foreach ($arreglo as $key =>$value){?>
    <tr>
            <td><?=$key?></td>
    
    <? foreach ($value as $key2 =>$value2){?>
        <td><?=$value2?></td>
        <!--tambien podria ser asi-->
        <td><?=$arreglo[$key][$key2]?></td>
    <?}?>
    </tr>
<?}?>
</table>
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #9 (permalink)  
Antiguo 16/06/2011, 09:45
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Hola compañeros

El codigo que tengo es el siguiente.....


Código HTML:
<table border="1" width="50%" cellpadding="10" cellspacing="1">
<tr> 

Código PHP:
    // Generar cada columna por sucursal     
while($reg_sucursal mssql_fetch_array($conexSucursal->result)){
    
     
$codigo_sucursal $reg_sucursal['SUCURSAL'];
     
$nombre_sucursal $reg_sucursal['NOMBRE_SUCURSAL'];
         
 
//  Consulta para traer los tipos de venta por cada sucursal 
Código HTML:
<td>

<table align="center" border="1" width="100%">
<tr>
<td align="center" colspan="5"><?php echo $codigo_sucursal.$nombre_sucursal;?></td>
</tr>

<tr>
<td>TIPO VENTA</td>
<td>PTTO UNI SEM</td>
<td>PTTO UNI MEN</td>
<td>TOTAL UNI</td>
<td>TOTAL UNI CUMP</td>

</tr> 
Código PHP:
if ($filtros == ""){
    
cargaTipoVentaSuc("WHERE",$gruposProductoPOSTPAGO,"AND",$codigo_sucursal,"002",$conexTipoVenta);
    
}elseif (
$filtros != ""){
    



cargaTipoVentaSuc($filtros,$filtroGrupo,"AND",$codigo_sucursal,"002",$conexTipoVenta);




}

// Generar cada fila por sucursal ...... 
while($reg mssql_fetch_array($conexTipoVenta->result)){
    
$tip_recep $reg['tip_recep'];
    
$directo $reg['TOTALDIRECTOPOSTPAGO'];
    
$indirecto $reg['INDIRECTO'];
    
$corporativo $reg['CORPORATIVO']; 
Código HTML:
<tr>
<td>directo</td>
<td>0</td>
<td>0</td>
<td> 
Código PHP:
 echo $directo
Código HTML:
</td>
<td>0</td>
</tr>
<tr>
<td>indirecto</td>
<td>0</td>
<td>0</td>
<td> 
Código PHP:
echo $indirecto
Código HTML:
</td>
<td>0</td>
</tr>
<tr>
<td>corporativo</td>
<td>0</td>
<td>0</td>
<td> 
Código PHP:
echo $corporativo
Código HTML:
</td>
<td>0</td>
</tr>

<tr>
<td>TOTAL</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr> 
Código PHP:
    
Código HTML:
</table>

</td> 
Código PHP:

Código HTML:
</tr>
</table> 



Muchas gracias por sus colaboraciones...

Compañeros

si quieren denme un email y les envio un archivo de como es que necesito la estructura y todo.

Por favor ....




Última edición por GatorV; 16/06/2011 a las 10:21
  #10 (permalink)  
Antiguo 16/06/2011, 10:13
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Respuesta: Sumar filas en una consulta sql

Hola informacionsys.

Me he puesto a probar el código que te puse antes para salir de dudas y me he dado cuenta que tenía un error y un fallo. El error era que me faltaba poner una variable en un sitio, y el fallo era que dejaba de imprimir la última fila.
El código correcto es el siguinete:

Código PHP:
$resultado mysql_query($query);  //resultado de la consulta 
$row mysql_fetch_assoc($resultado); //extraes el primer registro 
$codigo $row['cod_suc'];  //asignas datos a variables 
$directo $row['DIRECTO']; 
$indirecto $row['INDIRECTO']; 
$corp $row['CORPORATIVO']; 

while (
$reg mysql_fetch_assoc($resultado) ) //sigues sacando registros 
{  
     if (
$reg['cod_suc'] == $codigo)  //si los códigos son iguales sumas los valores
      

           
$directo += $reg['DIRECTO']; 
           
$indirecto += $reg['INDIRECTO']; 
           
$corp += $reg['CORPORATIVO']; 
     } 
     else {  
//si los códigos son distintos 
            //imprimes registro  
            // (Aquí va el código para imprimir la fila usando las variables $codigo, $directo, $indirecto y $corp).
              
            // asignas nuevos datos 
            
$codigo $reg['cod_suc'];  
            
$directo $reg['DIRECTO']; 
            
$indirecto $reg['INDIRECTO']; 
            
$corp $reg['CORPORATIVO']; 
            
     } 

//Aquí hay que poner el código para imprimir la última fila 

Este código trabaja bien, está probado. Ahora te toca a ti adaptarlo a tus necesidades. Intenta entender el algoritmo. Intenta identificar las variables y funciones que te he puesto con las que tú tienes y colócalas en el lugar apropiado.
Donde te he puesto que tienes que poner el código para imprimir la fila, básicamente lo que tienes que poner es esto:

Código:
<tr> 
<td>directo</td> 
<td>0</td> 
<td>0</td> 
<td><?php echo $directo;?></td> 
<td>0</td> 
</tr> 
<tr> 
<td>indirecto</td> 
<td>0</td> 
<td>0</td> 
<td><?php echo $indirecto;?></td> 
<td>0</td> 
</tr> 
<tr> 
<td>corporativo</td> 
<td>0</td> 
<td>0</td> 
<td><?php echo $corporativo;?></td> 
<td>0</td> 
</tr>

Intenta probar el código sin crear la tabla. Solo imprime las variables, para que puedas comprobar si te funciona o no. Una vez que veas que te salen los resultados esperados pon el código html para crear la tabla.

Este código es para mysql. Por lo que veo tú usas otro motor. No sé bien como va ese motor de base de datos por lo que no te he adaptado el código a lo tuyo, eso te lo dejo a ti, pero si entiendes bien el algoritmo no creo que tengas problema.
Si hay algo que no entiendes postealo aquí y con gusto intentaré ayudarte.

Un saludo.
  #11 (permalink)  
Antiguo 16/06/2011, 10:20
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Sumar filas en una consulta sql

Hola compañero

Muchas gracias por tu ayuda..

Voy a probarlo.... sin embargo dame un email y te envio un archivo de Excel donde explico mejor que es lo que necesito ....



Muchas Graciasssssss
  #12 (permalink)  
Antiguo 16/06/2011, 10:42
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Sumar filas en una consulta sql

Hola compañero Nexus 10 ....

oiie no entiendo muy bien el codigo , oiiie por favor se que tu tienes la idea de lo que necesito .... dame un email para enviarte la estructura de como es exactamente ...

Gracias por favor .......
  #13 (permalink)  
Antiguo 16/06/2011, 11:17
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Respuesta: Sumar filas en una consulta sql

¿Que es lo que no entiendes?. ¿Has intentado adaptar mi código al tuyo o esperas que te lo den todo hecho?

A ver, tú tienes esto:

Código PHP:
// Generar cada fila por sucursal ......  
while($reg mssql_fetch_array($conexTipoVenta->result)){ 
    
$tip_recep $reg['tip_recep']; 
    
$directo $reg['TOTALDIRECTOPOSTPAGO']; 
    
$indirecto $reg['INDIRECTO']; 
    
$corporativo $reg['CORPORATIVO']; 
Cámbialo por esto y dime que te sale:

Código PHP:
$reg =  mssql_fetch_array($conexTipoVenta->result));
$codigo $reg['cod_suc']; 
$directo $reg['TOTALDIRECTOPOSTPAGO']; 
$indirecto $reg['INDIRECTO']; 
$corp $reg['CORPORATIVO']; 

while (
$reg =  mssql_fetch_array($conexTipoVenta->result))
{  
     if (
$reg['cod_suc'] == $codigo)  
      { 
           
$directo += $reg['TOTALDIRECTOPOSTPAGO']; 
           
$indirecto += $reg['INDIRECTO']; 
           
$corp += $reg['CORPORATIVO']; 
     } 
     else {              
            
$codigo $reg['cod_suc'];  
            
$directo $reg['TOTALDIRECTOPOSTPAGO']; 
            
$indirecto $reg['INDIRECTO']; 
            
$corp $reg['CORPORATIVO']; 
            
            echo 
$directo." ".$indirecto." ".$corporativo."<br>";            
     } 
}
 echo 
$directo." ".$indirecto." ".$corporativo."<br>"
No pongas la parte de html. Sólo pon eso para ver si sale lo que esperas
  #14 (permalink)  
Antiguo 16/06/2011, 12:44
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Sumar filas en una consulta sql

Hola ...


Te lo agradezco mucho .... pero es muy dificil tratar de explicarte bien lo que necesito .... no es que quiera todo ,solo quiero una idea para saber como hacerlo....

Es un tipo de estructura un poco compleja......

El funcionamiento debe ser como estilo de un reporteador o generador de reportes..

Eso es lo que tengo que hacer.... crear un reporte segun los parametros que yo le envie... y hacer lo demas , que serian las operaciones

por eso insisti un poco en poderte enviar el archivo con la explicacion en concreto a un email


Bueno igual te lo agradezco inmensamente...


Gracias por tu ayuda ! ! !

Última edición por informacionsys; 16/06/2011 a las 13:15

Etiquetas: filas, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:15.