Principales respuestas
Campos sumatorios en un mismo query con diferentes condiciones

Pregunta
-
La verdad no sabía como describir claramente este problema...
Tengo una tabla con cuentas bancarias que en síntesis para lo que ocupo seria así:
CuentasBancarias
_______________
#numeroCuenta
nombreCuenta
Ejemplo de datos:
'124578877', 'BANCO YYY'
'124575555', 'BANCO mm'
'124575212', 'BANCO jjjjjjjj'
Y otra tabla con el detalle de movimientos de esas cuentas:
MovimientosCuentas
__________________
#numeroDocumento
numeroCuenta
montoLocal
montoDolar
tipoMovimiento (los tipos de movimiento serán 'DB' y 'CR')
Ejemplo de datos:
551, '124578877', 500, 1, CR
552, '124578877', 500, 1, CR
553, '124578877', 500, 1, DB
554, '124578877', 500, 1, DB
...
Lo que deseo es saber si en un solo query o bien de alguna otra manera que garantice una ejecución eficiente puedo obtener lo siguiente, totalizando todo por cuenta, moneda y tipo de movimiento:
Numero de Cuenta | Nombre de la Cuenta | Total DB | Total CR | Total DB$ | Total CR$
________________________________________________________________________
124578877 | BANCO YYY | 1.000 | 1.000 | 2 | 2
124575555 | BANCO mm | 2.000 | 2.000 | 4 | 4
124575212 | BANCO jjjjjjjj| 6.000 | 6.000 | 3 | 3
Espero haberme explicado bien y que me puedan ayudar.
Les agradezco de antemano, saludos!!
Respuestas
-
Basta con sumarizar valores agrupados bajo algún criterio y escribirlos en columnas mediante CASE, por ejemplo:
SELECT cb.numeroCuenta, nombreCuenta, SUM(CASE WHEN mc.tipoMovimiento = 'DB' THEN mc.montoLocal END) AS [Total DB], SUM(CASE WHEN mc.tipoMovimiento = 'CR' THEN mc.montoLocal END) AS [Total CR], SUM(CASE WHEN mc.tipoMovimiento = 'DB' THEN mc.montoDolar END) AS [Total DB$], SUM(CASE WHEN mc.tipoMovimiento = 'CR' THEN mc.montoDolar END) AS [Total CR$] FROM CuentasBancarias cb INNER JOIN MovimientosCuentas mc ON (cb.numeroCuenta = mc.numeroCuenta) GROUP BY cb.numeroCuenta, nombreCuenta ORDER BY cb.numeroCuenta; GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta Jim AT miércoles, 24 de mayo de 2017 16:02
-
Hola
puedes sumar condicionando los valores que necesitas:
Select numerocuenta, nombrecuenta, Sum(Case when m.tipoMovimiento = 'DB' then m.montoLocal end) DB, Sum(Case when m.tipoMovimiento = 'DB' then m.montoDolar end) DBDolares, Sum(Case when m.tipoMovimiento = 'CR' then m.montoLocal end) CR, Sum(Case when m.tipoMovimiento = 'CR' then m.montoDolar end) CRDolares from CuentasBancarias c inner join MovimientosCuentas m on c.numeroCuenta = m.numeroCuenta group by numerocuenta, nombrecuenta
Saludos
Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.
- Marcado como respuesta Jim AT miércoles, 24 de mayo de 2017 16:02
Todas las respuestas
-
Basta con sumarizar valores agrupados bajo algún criterio y escribirlos en columnas mediante CASE, por ejemplo:
SELECT cb.numeroCuenta, nombreCuenta, SUM(CASE WHEN mc.tipoMovimiento = 'DB' THEN mc.montoLocal END) AS [Total DB], SUM(CASE WHEN mc.tipoMovimiento = 'CR' THEN mc.montoLocal END) AS [Total CR], SUM(CASE WHEN mc.tipoMovimiento = 'DB' THEN mc.montoDolar END) AS [Total DB$], SUM(CASE WHEN mc.tipoMovimiento = 'CR' THEN mc.montoDolar END) AS [Total CR$] FROM CuentasBancarias cb INNER JOIN MovimientosCuentas mc ON (cb.numeroCuenta = mc.numeroCuenta) GROUP BY cb.numeroCuenta, nombreCuenta ORDER BY cb.numeroCuenta; GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta Jim AT miércoles, 24 de mayo de 2017 16:02
-
Hola
puedes sumar condicionando los valores que necesitas:
Select numerocuenta, nombrecuenta, Sum(Case when m.tipoMovimiento = 'DB' then m.montoLocal end) DB, Sum(Case when m.tipoMovimiento = 'DB' then m.montoDolar end) DBDolares, Sum(Case when m.tipoMovimiento = 'CR' then m.montoLocal end) CR, Sum(Case when m.tipoMovimiento = 'CR' then m.montoDolar end) CRDolares from CuentasBancarias c inner join MovimientosCuentas m on c.numeroCuenta = m.numeroCuenta group by numerocuenta, nombrecuenta
Saludos
Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.
- Marcado como respuesta Jim AT miércoles, 24 de mayo de 2017 16:02
-
-