SQL - Duda Query Sql

 
Vista:
sin imagen de perfil

Duda Query Sql

Publicado por Yeison Asdrubal (15 intervenciones) el 31/03/2013 22:23:59
Tengo una tabla de la cual debo sumar los saldos por producto mes a mes




Por ejemplo debo sacar en otra columna los saldos de cada uno de los meses

Saldo_Enero = SALDO_INICIAL + ENERO
Saldo_Febrero = Saldo_Enero + FEBRERO
Saldo_Marzo = Saldo_Febrero + MARZO

Como hago para sacar estos saldos?

Tengo que para Saldo_Enero:

1
2
SELECT SALDO_INICIAL + ENERO AS "Saldo Enero"
FROM MESES


Lo cual me miestra el saldo para enero



Pero no he podido sacar los otros saldos asi, me da error

1
2
3
4
5
SELECT SALDO_INICIAL + ENERO AS "Saldo Enero",
Saldo_Enero + FEBRERO AS "Saldo_Febrero",
Saldo_Febrero + MARZO AS "Saldo_marzo"
...
FROM MESES




Alguien me puede dar una manita???
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Duda Query Sql

Publicado por Isaias (1921 intervenciones) el 01/04/2013 19:27:50
¿Que motor de base de datos estas manejando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Duda Query Sql

Publicado por YeisonSoto (15 intervenciones) el 01/04/2013 21:13:28
Gracias por responder, estoy usando Oracle 11g
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Duda Query Sql

Publicado por leonardo_josue (1173 intervenciones) el 01/04/2013 22:42:43
Hola YeisonSoto:

No nos dices qué error es el que te está marcando el motor de BD, aunque podría asegurar que sería algo referente al que el campo "saldo_enero" no existe cierto???

El problema es que "saldo_enero" es un campo calculado, es decir, no existe hasta después de la ejecución de la consulta. Tendrías que hacer algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> SELECT * FROM tabla;
+----------+---------------+--------+---------+--------+---------+
| concepto | saldo_inicial | enero  | febrero | marzo  | abril   |
+----------+---------------+--------+---------+--------+---------+
| RESINAS  | 200000        | 600000 | 2500000 | 700000 | 2000000 |
| SULFATOS | 100000        | 600000 | 1500000 | 700000 | 2000000 |
| RESINAS  | 200000        | 500000 | 1500000 | 700000 | 2000000 |
+----------+---------------+--------+---------+--------+---------+
3 rows in set (0.00 sec)
 
mysql> SELECT
    ->   concepto, saldo_inicial,
    ->   enero,
    ->   saldo_inicial + enero "Saldo Enero",
    ->   febrero,
    ->   saldo_inicial + enero + febrero "Saldo Febrero"
    -> FROM tabla;
+----------+---------------+--------+-------------+---------+---------------+
| concepto | saldo_inicial | enero  | Saldo Enero | febrero | Saldo Febrero |
+----------+---------------+--------+-------------+---------+---------------+
| RESINAS  | 200000        | 600000 |      800000 | 2500000 |       3300000 |
| SULFATOS | 100000        | 600000 |      700000 | 1500000 |       2200000 |
| RESINAS  | 200000        | 500000 |      700000 | 1500000 |       2200000 |
+----------+---------------+--------+-------------+---------+---------------+
3 rows in set (0.00 sec)


es decir, en lugar de hacer esto:

1
Saldo_Enero + FEBRERO AS "Saldo_Febrero",



Sustituyes "Saldo_Enero" por la operación para calcular este saldo.

1
saldo_inicial + enero + febrero "Saldo Febrero"


Esto tendrías que hacerlo para cada saldo:

1
2
3
4
Saldo_Enero = Saldo_inicial + Enero
Saldo_Febrero = Saldo_inicial + Enero + Febrero
...
Saldo_Diciembre = Saldo inicial + Enero + Febrero + ... + Diciembre


Haz la prueba y nos comentas

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Duda Query Sql

Publicado por YeisonSoto (15 intervenciones) el 01/04/2013 23:18:46
Muchas gracias por responder leo, la verdad ese es el error que me da: Ya me di cuenta que por regla los alias no pueden ser usados como origen de datos ni en el select ni tampoco en where, por la razon que tu expones --> "no existe hasta después de la ejecución de la consulta"

No lo he hecho asi porque como son 13 meses con el mes de cuadre el query seria algo muy largo

Como tu mismo lo dices:


1
2
3
4
Saldo_Enero = Saldo_inicial + Enero
Saldo_Febrero = Saldo_inicial + Enero + Febrero
...
Saldo_Diciembre = Saldo inicial + Enero + Febrero + ... + Diciembre


No hay otra forma con sql de hacerlo?, algo asi como que

Saldo_Enero + Febrero = Saldo_Febrero, y se vaya acumulando para no repetir tanto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Duda Query Sql

Publicado por leonardo_josue (1173 intervenciones) el 02/04/2013 00:12:40
Hola de nuevo:

No estoy seguro de si en ORACLE se permite hacer, pero MySQL te permite hacer uso de variables en las consultas, y asignar valores a estas variables, sería más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> SET @saldo_enero = 0;
Query OK, 0 rows affected (0.00 sec)
 
mysql> SET @saldo_febrero = 0;
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT
    -> concepto, saldo_inicial,
    -> enero,
    -> @saldo_enero := saldo_inicial + enero "Saldo Enero",
    -> febrero,
    -> @saldo_febrero := @saldo_enero + febrero "Saldo Febrero"
    -> FROM tabla T1
    -> ;
+----------+---------------+--------+-------------+---------+---------------+
| concepto | saldo_inicial | enero  | Saldo Enero | febrero | Saldo Febrero |
+----------+---------------+--------+-------------+---------+---------------+
| RESINAS  | 200000        | 600000 |      800000 | 2500000 |       3300000 |
| SULFATOS | 100000        | 600000 |      700000 | 1500000 |       2200000 |
| RESINAS  | 200000        | 500000 |      700000 | 1500000 |       2200000 |
+----------+---------------+--------+-------------+---------+---------------+
3 rows in set (0.00 sec)


Esto sirve para MySQL, pero te repito, no sé si exista una posibilidad parecida en ORACLE

1
No lo he hecho asi porque como son 13 meses con el mes de cuadre el query seria algo muy largo


El que un query sea muy largo no implica que no sea óptimo... yo en lo particular he llegado a manejar consultas de más de 50 líneas de código, manejando hasta 20 tablas sin ningún problema, entonces no veo por qué tu preocupación por la dimensión de la consulta.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Duda Query Sql

Publicado por YeisonSoto (15 intervenciones) el 04/04/2013 16:59:10
Muchas gracias Leo, por querer ayudar, por el momento tengo la consulta "larga": Saldo_Diciembre = Saldo inicial + Enero + Febrero +Marzo ... + Diciembre as SaldoDiciembre....

Pero seguirè investigando a ver si la puedo hacer asi como yo quiero

Gracias....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Duda Query Sql

Publicado por Yeison Asdrubal (15 intervenciones) el 24/07/2013 15:54:14
Sigo con el dilema, debo hacer lo que ya habia explicado solo con la consulta sql, pero no lo consigo...

Alguien sabe algun metodo para hacer esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar