SQL - Sumar y Restar una misma columna

   
Vista:

Sumar y Restar una misma columna

Publicado por roberto (12 intervenciones) el 27/11/2014 21:01:55
Hola Chicos,

Resulta que llevo todo el día tratando de resolver la siguiente incógnita, la que no me resulta…
Necesito obtener sumar una misma columna pero según el criterio que tenga otra columna(todo de la misma tabla), me explico con el detalle:

Tabla: PAGOS

TIPO Monto ID
C------10----1
C------10----1
A------10----1
C------10----1
A------10----1
C------10----2
A------15----2
C------10----3
A------10----1


Resultado Esperado:


ID------TIPOC---------TIPOA-----SALDO
1______40______30______10__
2______10______15______-5__
2______10______0_______10__

*segun el ID sume los C y los A y que realice una resta entre ambas.


Actualmente, saco el total de la columna C y luego el A y lo paso a Excel y hago el resultado, pero quiero que desde la consulta SQL me realice esta operación…. Sera Posible?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Sumar y Restar una misma columna

Publicado por Isaias (690 intervenciones) el 27/11/2014 22:11:51
Casi todo es posible, solo que no nos dejes a la adivinanza que motor de base de datos manejas.
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

Sumar y Restar una misma columna

Publicado por roberto (12 intervenciones) el 27/11/2014 22:17:17
Lo siento, Utilizo dbForge Studio Express -tengo TOAD pero me gusta mas el Forge-( Oracle9i) --- el codigo que uso es:

1
2
Select sum(Monto) from PAGOS where Tipo='C'
    GROUP BY ID
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

Sumar y Restar una misma columna

Publicado por leonardo_josue (878 intervenciones) el 27/11/2014 23:14:40
Hola Roberto:

La consulta que colocas te obtiene la suma de una columna, pero dado que tú quieres obtener la suma en dos columnas lo que tienes que utilizar son SUMAS CONDICIONALES. No me cuadra el resultado que pones como salida con los datos que pones de ejemplo... puedo suponer que fue algún error de dedo, y que simplemente pusiste un ejemplo de lo que quieres mostrar, porque los totales NO CORRESPONDEN A LO DATOS DE TU TABLA.

No tengo forma de probar con ORACLE, pero en MySQL, con SQL Estandar, sería 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
26
27
28
29
30
mysql> SELECT * FROM pagos;
+------+-------+------+
| tipo | monto | ID   |
+------+-------+------+
| C    |    10 |    1 |
| C    |    10 |    1 |
| A    |    10 |    1 |
| C    |    10 |    1 |
| A    |    10 |    1 |
| C    |    10 |    2 |
| A    |    15 |    2 |
| C    |    10 |    3 |
| A    |    10 |    1 |
+------+-------+------+
9 rows in set (0.00 sec)
 
mysql> SELECT
    ->    id,
    ->    SUM(CASE WHEN tipo = 'C' THEN monto ELSE 0 END) total_c,
    ->    SUM(CASE WHEN tipo = 'A' THEN monto ELSE 0 END) total_a
    -> FROM pagos
    -> GROUP BY id;
+------+---------+---------+
| id   | total_c | total_a |
+------+---------+---------+
|    1 |      30 |      30 |
|    2 |      10 |      15 |
|    3 |      10 |       0 |
+------+---------+---------+
3 rows in set (0.00 sec)

Observa que el truco está en poner un CASE-WHEN dentro de la suma, de ahí el nombre de SUMAS CONDICIONALES. Para el caso de la RESTA puedes hacerlo de dos maneras, una sería hacer una SUBCONSULTA al final del cálculo para restar ambos totales, o hacer otra suma condicional, si el TIPO ES C entonces se suma el monto, si el tipo es A, entonces se resta el monto (o lo que sería lo mismo se SUMA (-1) * MONTO. Eso te lo dejo para que tú lo intentes, si sigues con problemas postea lo que intentaste hacer y con gusto tratamos de ayudarte.

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

Sumar y Restar una misma columna

Publicado por roberto (12 intervenciones) el 27/11/2014 23:21:37
Leo Muchas Gracias, el saldo corresponde a la Resta de la columna C y la columna A , es decir,

EL :
ID 1 TOTAL C = 30 Y TOTAL A =30 SALDO = 0 (30-30)
ID 2 TOTAL C = 10 Y TOTAL A =15 SALDO = -5 (10-15)
ID 3 TOTAL C = 10 Y TOTAL A =0 SALDO =1 0 (10-0)
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

Sumar y Restar una misma columna

Publicado por roberto (12 intervenciones) el 28/11/2014 00:43:25
Leo Gracias lo acabo de probar y me resulto de maravillas, pero como sera para agregar otra condición a la suma pero de otra columna? y para sacar la diferencia de ambas
columnas y ademas agregar una columna de la misma tabla y la columna de otra tabla según el tipo?(la referencia seria la columna tipo99 con tipo2_pagos.

Ejemplo Practico:

Esta es la tabla inicial(solo tome el ID 1)

PAGOS
TIPO Monto ID--tipo99
C------10----1 ----ban1
C------10----1 ----ban1
A------10----1 ----ban1
C------10----1 ----ban2
A------10----1 ----ban2
A------10----1 ----ban2


Y la otra tabla seria:
tabla:DETALLE

tipo2_pagos------Obser1 ---------obser2----------obser3 ----------obser4
ban2------------------pel-------------------hab------------rso----------------as6
ban1------------------pin--------------------sus------------rs1----------------as7
vop-----------------ades-------------------elim-----------rs2----------------as8



Lo esperado seria algo asi[b](El ejemplo es solo para el ID: 1)


ID------TOTAL C------TOTAL A------SALDO(C-A)-------tipo99---------obser2-------obser3----------obser4-----------------Obser1
1----------20---------------10-------------10--------------------ban1-----------------hab------------rso---------------as6------------------pel
1----------10---------------20--------------(-10)----------------ban2------------------sus------------rs1---------------as7------------------pin



Osea que sume segun el tipo99 que se encuentre en la tabla Detalle.
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

Sumar y Restar una misma columna

Publicado por Rafael (83 intervenciones) el 28/11/2014 13:45:40
Pues haces un JOIN...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT ID
     , TOTAL_C
     , TOTAL_A
     , SALDO
     , A.TIPO99
     , OBSER2
     , OBSER3
     , OBSER4
     , OBSER1
FROM (
       SELECT id
            , SUM(CASE WHEN tipo = 'C' THEN monto ELSE 0 END) total_c
            , SUM(CASE WHEN tipo = 'A' THEN monto ELSE 0 END) total_a
            , SUM(CASE WHEN tipo = 'C' THEN monto ELSE 0 END) - SUM(CASE WHEN tipo = 'A' THEN monto ELSE 0       END) SALDO
            , tipo99
       FROM pagos
       GROUP BY id, tipo99) A,
       DETALLE B
WHERE A.TIPO99 = B.TIPO99;


Nos cuentas como te fue??
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

Sumar y Restar una misma columna

Publicado por ROBERTO (12 intervenciones) el 28/11/2014 14:22:53
Excelente, me resulto de maravilla, muchas gracias a todos los que me ayudaron.

Saludos
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

Sumar y Restar una misma columna

Publicado por Jorge (1 intervención) el 28/11/2014 17:48:27
Mmm... y no sería mas sencillo de la forma: (tampoco tengo forma de probar en este momento)
1
2
3
4
5
6
SELECT id,
       SUM(CASE WHEN tipo = 'C' THEN monto ELSE 0 END) total_c ,
       SUM(CASE WHEN tipo = 'A' THEN monto ELSE 0 END) total_a ,
       SUM(CASE WHEN tipo = 'C' THEN monto WHEN tipo = 'A' THEN (-1)*monto ELSE 0 END) SALDO
FROM pagos
GROUP BY id;
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

Sumar y Restar una misma columna

Publicado por ROBERTO (12 intervenciones) el 28/11/2014 18:51:05
Jorge, también me funciono esta forma.

Saludos y gracias por su tiempo.
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

Sumar y Restar una misma columna

Publicado por Kurosaki (2 intervenciones) el 23/01/2015 15:54:19
Hola a todos yo no se como realizar la suma de la siguiente tabla...solo deseo la suma total del campo DEFECTO VALOR y que se agrupe por el campo HOSTAL :

SELECT
alojar.Hostal,
alojar.Habitacion,
alojar.Id_Rut,
alojar.`Defecto Valor`,
alojar.`Fecha Ingreso`,
alojar.Estado
FROM alojar

Por favor alguien entregue su sabiduria, ya que soy bastante nuevo en 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

Sumar y Restar una misma columna

Publicado por Roberto (12 intervenciones) el 23/01/2015 19:31:44
Prueba con esto y comentas.

1
Select alojar.Hostal, SUM(alojar.`Defecto Valor`), FROM alojar Group By alojar.Hostal

PD: No pongas el nombre de la tabla, solo coloca el campos, ya que no estas uniendo, a menos que los campos se llamen asi, si fuera asi, omite mi comentario.. XD
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

Sumar y Restar una misma columna

Publicado por Kurosaki (2 intervenciones) el 24/01/2015 18:39:20
Sql error sintaxis, perdon a todo esto yo utilizo dbforge studio para crear las tablas y vistas y ..lo que deseo enrealidad es crear una vista que me arroje los valores totales agrupados de la tabla ALOJAR
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