Vista

Roberto
15 de Junio del 2005
Que tal, necesito generar un reporte complejo con .net y crystal reports, la Base de datos es Oracle, estaba pensando en vistas pero tengo varios problemas.

Existen tablas para bancos, depositos, prestamos, etc. Ahora cada tabla tiene su información y estan relacionadas.

Necesito un reporte parecido a:

Banco1 Banco2 Banco 3
Saldo $0000 $0000 $0000
Prestamo1 $0000 $0000
Prestamo 2 $0000 $0000 $0000
.
.
Prestamo N $0000 $0000
Deposito 1 $0000 $0000 $0000
Deposito 2
.
.
Deposito N
Saldo total saldo-prestamos+depositos (renglon calculado)

En cada caso tengo un query para traer los bancos de la tabla bancos, uno para el saldo de cada banca de la tabla saldos, otro para los depositos de la tabla depositos, etc, ya que son mas conceptos, aqui solo ejemplifico algunos.

El problema es que aqui yo tengo por cada consulta un listado y debo presentarlo por renglon. ¿Es posible generar una vista que me de esos valores que deseo en la forma que requiero?.

Gracias

ricardo franco
15 de Junio del 2005
Tienes dos maneras de hacerlo, una desde oracle y otra desde crystal.
Para Oracle, puedes utilizar un decode por cada columna por tipo de banco que utilizes, decode (campobanco, banco1, valor1, null), decode(campobanco, banco2, valor2, null), etc
y de esta forma lo pudieras pasar a columnas teniendo una cantidad limitada de bancos.
Desde Crystal es utilizar las formulas y solo desplegar el valor en un campo si el tipo de banco es el que esperas

Roberto
15 de Junio del 2005
Muchas gracias por sus tips. Al menos en Oracle ya pude crear una vista como la siguiente, y utilice el decode como lo recomiendan. Los bancos son fijos y muy dificlmente pueden variar, aunque sigue sin gustarme la idea de utilizar el id fijo. La vista quedo asi:


CREATE OR REPLACE VIEW VW_POSICIONBANCOS (FECHA, BANCO1, BANCO2, BANCO3, BANCO4, BANCO5
) AS SELECT s.fecha, DECODE (b.id_banco, '1001',SUM(s.saldo),0) BANAMEX,
DECODE (b.id_banco, '1002',SUM(s.saldo),0) BANCOMER,
DECODE (b.id_banco, '1006',SUM(s.saldo),0) HSBC,
DECODE (b.id_banco, '1004',SUM(s.saldo),0) SANTANDER,
DECODE (b.id_banco, '1005',SUM(s.saldo),0) SCOTIA
FROM saldos_cuenta s, bancos b, ctas_bancaria c
WHERE b.id_banco = c.id_banco AND c.id_cta_bancaria = s.id_cta_bancaria
AND s.fecha = '03/05/2005'
GROUP BY b.id_banco, s.fecha
UNION ALL
/*PRESTAMOS*/
SELECT p.fecha_vencimiento, DECODE (b.id_banco, '1001',SUM(p.importe),0) BANAMEX,
DECODE (b.id_banco, '1002',SUM(p.importe),0) BANCOMER,
DECODE (b.id_banco, '1006',SUM(p.importe),0) HSBC,
DECODE (b.id_banco, '1004',SUM(p.importe),0) SANTANDER,
DECODE (b.id_banco, '1005',SUM(p.importe),0) SCOTIA
FROM Intereses I, Pasivos P, ctas_bancaria C, bancos B
WHERE i.status = 0
AND b.id_banco = c.id_banco
AND p.id_cta_bancaria = c.id_cta_bancaria
AND p.id_pasivo = i.id_pasivo
AND p.fecha_vencimiento = '03/05/2005'
GROUP BY b.id_banco, p.importe, p.fecha_vencimiento
UNION ALL
/*INTERESES*/
SELECT p.fecha_vencimiento, DECODE (b.id_banco, '1001',SUM(p.intereses),0) BANAMEX,
DECODE (b.id_banco, '1002',SUM(p.intereses),0) BANCOMER,
DECODE (b.id_banco, '1006',SUM(p.intereses),0) HSBC,
DECODE (b.id_banco, '1004',SUM(p.intereses),0) SANTANDER,
DECODE (b.id_banco, '1005',SUM(p.intereses),0) SCOTIA
FROM Intereses I, Pasivos P, ctas_bancaria C, bancos B
WHERE i.status = 0
AND b.id_banco = c.id_banco
AND p.id_cta_bancaria = c.id_cta_bancaria
AND p.id_pasivo = i.id_pasivo
AND p.fecha_vencimiento = '03/05/2005'
GROUP BY b.id_banco, p.intereses, p.fecha_vencimiento
UNION ALL
SELECT d.fecha, DECODE (b.id_banco, '1001',d.importe,null) BANAMEX,
DECODE (b.id_banco, '1002',d.importe, null) BANCOMER,
DECODE (b.id_banco, '1006',d.importe, null) HSBC,
DECODE (b.id_banco, '1004',d.importe, null) SANTANDER,
DECODE (b.id_banco, '1005',d.importe, null) SCOTIA
FROM Depositos d, ctas_bancaria c, bancos b
WHERE b.id_banco = c.id_banco
AND d.id_cta_bancaria = c.id_cta_bancaria
AND d.tipo = 2
AND (d.clasificacion = 1 OR d.clasificacion is null)
AND d.fecha = '03/05/2005'

Ahora bien, la fecha la voy a quitar de la vista para desde el aspx seleccionar esta vista y poner el where fecha de acuerdo a la seleccionada por el usuario, aun no estoy seguro si funcionara el despliegue como lo requiero, ya que para los registros de los bancos deja un renglon con su valor respectivo valory los demas vacios, algo asi:

Banco1 Banco2 Banco3
saldobanco1
saldobanco2
saldobanco3
prestamo_b1 prestamo_b2
intereses_b1 intereses_b2
deposito1_b1 deposito1_b3
deposito2_b1 deposito1_b2

al ejecutar la vista en oracle asi me muestra los datos, espero en el aspx, no coloque asi los valores.

Muchas gracias por su ayuda y si alguien tiene una mejor idea, ser abien recibida.
Saludos.


ivette
15 de Junio del 2005
Yo te recomiendo que hagas tu query y aproveches las propiedades del cristal Report como agrupar y la obtencion de sumas de lo que se muestra por grupo, los detalles a lso qeu te da opcion el cristal report pues la vistaqeu ti quieres esta algo compleja