Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Sumando columnas/Filas (https://www.clubdelphi.com/foros/showthread.php?t=10707)

StartKill 27-05-2004 01:22:46

Sumando columnas/Filas
 
Que tal? como va el Club? :p 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ú

StartKill 27-05-2004 03:00:23

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 :D

Código:

select
    ruta,
    sum(peso)
from
    vista_pesos
group by
    ruta

Your Friend,

StartKill
Lima-Perú

jachguate 27-05-2004 03:07:56

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.

;)

jachguate 27-05-2004 03:09:19

jejeje... veo que has llegado a lo mismo :p

roman 27-05-2004 07:30:58

¿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

__cadetill 27-05-2004 09:42:32

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,
......


La franja horaria es GMT +2. Ahora son las 11:23:37.

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