Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2004
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Question Sumando columnas/Filas

Que tal? como va el Club? reciban mis mas sinceros saludos.

Trabajo con delphi 7.0 interbase 6.0.1 con componentes IBX.

Mi duda es la siguiente, tengo una tabla con la siguiente estructura:
Código:
CREATE TABLE AAAA (
    BOLETA CHAR (8) ,
    RUTA1 CHAR (1) ,
    RUTA2 CHAR (1) ,
    RUTA3 CHAR (1) ,
    RUTA4 CHAR (1) ,
    PESO1 INTEGER,
    PESO2 INTEGER,
    PESO3 INTEGER,
    PESO4 INTEGER,
    FID INTEGER);
Esta a su vez esta llena con la siguente informacion:
Código:
======================================================================
BOLETA RUTA1 RUTA2 RUTA3 RUTA4 PESO1      PESO2      PESO3      PESO4 
======================================================================
100      A                        9          0          0          0  
101      B     A                  5          5          0          0  
102      C                        3          0          0          0  
103      A     B                 10         12          0          0  
104      C                       11          0          0          0  
105      C     A     B           15         12         10          0  
106      A     B     C     D     13         10          5          8  
106      A                        5          0          0          0  
----------------------------------------------------------------------
                                 71         39         15          8

SUMA TOTAL ---> 133.00
Mi deseo es hacer un select de tal forma que tenga como resultado lo siguiente:

Código:
================
RUTAS    PESOS
================
  A       54
  B       37
  C       34
  D        8
----------------
SUMA TOTAL --> 133.00
Osea: Sumar todos los pesos segun su ruta (ruta1 con peso1, ruta2, con peso2) agrupando rutas.... creo que soy malo explicandome--pero si le echan una mirada a las figuras valen mas que mil palabras.

La verdad no se si podra un select pero estoy todo oidos "ojos" a sus comentarios consejos, maldiciones...

Gracias, your friend

StartKill
Lima-Perú
Responder Con Cita
  #2  
Antiguo 27-05-2004
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Hola de nuevo.

No contento con mi ignorancia traté de darle solución a mi requerimiento, se que no es la mejor...pero alli les va----pero eso no quiere decir que aun espero sus aportes

he creado una vista asi:
Código:
CREATE VIEW VISTA_PESOS (
    RUTA,
    PESO)
AS
select ruta1 as ruta, peso1 as peso from aaaa 
union all
select ruta2 as ruta, peso2 as peso from aaaa 
union all
select ruta3 as ruta, peso3 as peso from aaaa  
union all
select ruta4 as ruta, peso4 as peso from aaaa
;
Luego con esta vista he hecho mi consulta

Código:
select 
    ruta,
    sum(peso)
from
    vista_pesos
group by
    ruta
Your Friend,

StartKill
Lima-Perú
Responder Con Cita
  #3  
Antiguo 27-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola.

Creo que pudiste diseñar una tabla del tipo:

Podes hacer una vista con la unión de 4 selects, uno para ruta1, otro para ruta2, y asi... para luego aplicar un sum a esta vista

quedaria algo como:

Código SQL [-]
La vista:

Select ruta1, peso1
  from aaaa
 where ruta1 is not null
union
Select ruta2, peso2
  from aaaa
 where ruta2 is not null
etc.

Luego:

Select ruta, sum(peso)
  from vista_aaaa
 group by ruta;

Yo hubiera preferido hacer una tabla del tipo:

Código:
CREATE TABLE AAAA (
    BOLETA CHAR (8) ,
    ORDEN SMALLINT,
    RUTA CHAR (1) ,
    PESO INTEGER,
    FID INTEGER)
donde orden simplemente seria 1, 2, 3 o 4.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 27-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
jejeje... veo que has llegado a lo mismo
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 27-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Interbase no tiene un condicional IF?

Porque de ser así y si no les importa que el resultado salga en columnas en lugar de filas, se podría hacer algo así sin crear una vista:

Código SQL [-]
select
  sum(if(ruta1='A', peso1, 0)) +
  sum(if(ruta2='A', peso2, 0)) +
  sum(if(ruta3='A', peso3, 0)) +
  sum(if(ruta4='A', peso4, 0)) as rutaA,

  sum(if(ruta1='B', peso1, 0)) +
  sum(if(ruta2='B', peso2, 0)) +
  sum(if(ruta3='B', peso3, 0)) +
  sum(if(ruta4='B', peso4, 0)) as rutaB,

  sum(if(ruta1='C', peso1, 0)) +
  sum(if(ruta2='C', peso2, 0)) +
  sum(if(ruta3='C', peso3, 0)) +
  sum(if(ruta4='C', peso4, 0)) as rutaC,

  sum(if(ruta1='D', peso1, 0)) +
  sum(if(ruta2='D', peso2, 0)) +
  sum(if(ruta3='D', peso3, 0)) +
  sum(if(ruta4='D', peso4, 0)) as rutaD
from
  rutas

Resultado:

Código:
rutaA rutaB rutaC ruta D
  54    37    34    8
// Saludos
Responder Con Cita
  #6  
Antiguo 27-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Cita:
Empezado por roman
¿Interbase no tiene un condicional IF?
El IF no, pero FB 1.5 tiene el case (a parte de aconsejar a StartKill migrar de IB 6 a FB 1.5)

Y la cosa quedaría más o menos como dice Román (pero con case)

Código SQL [-]
select
  sum( case ruta1 when 'A' then peso1 else 0 end) +
  sum( case ruta2 when 'A' then peso1 else 0 end) +
  sum( case ruta3 when 'A' then peso1 else 0 end) +
  sum( case ruta4 when 'A' then peso1 else 0 end) as rutaA,

  sum( case ruta1 when 'B' then peso1 else 0 end) +
  sum( case ruta2 when 'B' then peso1 else 0 end) +
  sum( case ruta3 when 'B' then peso1 else 0 end) +
  sum( case ruta4 when 'B' then peso1 else 0 end) as rutaB,
......
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:30:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi