(id_plano_conta, descricao, tipo_conta) VALUES ('2.2','Escritorio','S');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('2.2.1','Materiais de limpeza','A');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('2.2.2','Materiais de Escritorio','A'); -- Vamos povoar a tabela lancamento: INSERT INTO lancamento (id_lancamento, dt_lancamento, numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (1,'2012-07-03','0000084','1.2.2','E',NULL,10.55); INSERT INTO lancamento (id_lancamento, dt_lancamento, numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (2,'2012-07-03','0000084','1.2.2','S',NULL,2.50); INSERT INTO lancamento (id_lancamento, dt_lancamento, numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (3,'2012-07-01','0000021','1.1.2','E',NULL,50.00);INSERT INTO lancamento (id_lancamento, dt_lancamento,numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (4,'2012-07-01','0000042','1.2.2','E',NULL,100.00);INSERT INTO lancamento (id_lancamento, dt_lancamento, numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (5,'2012-07-04','0000084','1.2.2','E',NULL,160.00);INSERT INTO lancamento (id_lancamento, dt_lancamento, numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (6,'2012-07-04','0000084','1.2.2','S',NULL,80.00); INSERT INTO lancamento (id_lancamento, dt_lancamento, numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (7,'2012-07-04','0000142','2.2.1','S',NULL,40.00);INSERT INTO lancamento (id_lancamento, dt_lancamento, numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (8,'2012-07-07','0000210','2.2.2','S',NULL,80.00);INSERT INTO lancamento (id_lancamento, dt_lancamento, numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (9,'2012-07-13','0000242','2.2.2','S',NULL,20.00);INSERT INTO lancamento (id_lancamento, dt_lancamento, numero_doc, id_plano_conta, tipo_lancamento, historico, valor_lancamento) VALUES (10,'2012-07-13','0000284','2.2.1','S',NULL,15.00);Vamos as querys relatorios...Razao Detalhado (Script para Firebird 2.5.1, Oracle 11g R2, Postgres 9.1, SQL Server 2012) -- razao detalhado (Script para Firebird 2.5.1, Oracle 11g R2, Postgres 9.1, SQL Server 2012) SELECT lan.id_lancamento , lan.dt_lancamento , lan.numero_doc , lan.id_plano_conta , lan.tipo_lancamento , lan.historico , coalesce( ( SELECT sum ( CASE WHEN tipo_lancamento = 'E' THEN valor_lancamento WHEN tipo_lancamento = 'S' THEN valor_lancamento * -1 ELSE 0.00 END ) FROM lancamento WHERE dt_lancamento < lan.dt_lancamento AND id_plano_conta = lan.id_plano_conta ),0) AS saldo_inicial , CASE WHEN tipo_lancamento = 'E' THEN valor_lancamento ELSE 0.00 END AS entrada , CASE WHEN tipo_lancamento = 'S' THEN valor_lancamento ELSE 0.00 END AS saida , coalesce( ( SELECT sum ( CASE WHEN tipo_lancamento = 'E' THEN valor_lancamento WHEN tipo_lancamento = 'S' THEN valor_lancamento * -1 ELSE 0.00 END ) FROM lancamento WHERE dt_lancamento <= lan.dt_lancamento AND id_plano_conta = lan.id_plano_conta ),0) AS saldo_final FROM lancamento AS lan JOIN plano_conta AS plc ON plc.id_plano_conta = lan.id_plano_conta WHERE lan.dt_lancamento >= '2012-07-04' AND lan.dt_lancamento <= '2012-07-14' AND lan.id_plano_conta = '2.2.2' ORDER BY lan.dt_lancamento ASC ;Razao Sumarizado Por Plano de Conta (Script para Firebird 2.5.1, Oracle 11g R2, Postgres 9.1, SQL Server 2012) -- razao sumarizado por plano de conta (Script para Firebird 2.5.1, Oracle 11g R2, Postgres 9.1, SQL Server 2012) SELECT x.id_plano_conta , pcx.descricao , coalesce( ( SELECT sum ( CASE WHEN tipo_lancamento = 'E' THEN valor_lancamento WHEN tipo_lancamento = 'S' THEN valor_lancamento * -1 ELSE 0.00 END ) FROM lancamento WHERE dt_lancamento < '2012-07-04' AND id_plano_conta = x.id_plano_conta ),0) AS saldo_inicial , sum(x.entrada) AS entrada , sum(x.saida) AS saida , coalesce( ( SELECT sum ( CASE WHEN tipo_lancamento = 'E' THEN valor_lancamento WHEN tipo_lancamento = 'S' THEN valor_lancamento * -1 ELSE 0.00 END ) FROM lancamento WHERE dt_lancamento <= '2012-07-14' AND id_plano_conta = x.id_plano_conta ),0) AS saldo_final FROM ( SELECT lan.id_plano_conta , CASE WHEN tipo_lancamento = 'E' THEN valor_lancamento ELSE 0.00 END AS entrada , CASE WHEN tipo_lancamento = 'S' THEN valor_lancamento ELSE 0.00 END AS saida FROM lancamento AS lan JOIN plano_conta AS plc ON plc.id_plano_conta = lan.id_plano_conta WHERE lan.dt_lancamento >= '2012-07-04' AND lan.dt_lancamento <= '2012-07-14' AND lan.id_plano_conta = '2.2.2' ) AS x JOIN plano_conta AS pcx ON pcx.id_plano_conta = x.id_plano_conta GROUP BY x.id_plano_conta , pcx.descricao ORDER BY