Desenvolvendo querys SQL para Razao e Balancete Contabil.Em um artigo escrito neste blog no dia 06-09-2012 Consulta SQL de Plano de Contas - Query Contabil - Query para Centro de Custo conforme link http://www.emersonhermann.blogspot.com.br/2012/09/consulta-sql-de-plano-de-contas-query.html, mostrei como desenvolver uma query em uma estrutura de plano de contas ou centro de custo, dessa vez irei apresentar de forma pratica, gradual e por exemplos de como desenvolver uma query para relatorio de Razao, Razao Sumarizado e Balancete Contabil. Nivel de Complexidade: Intermediario, Avancado Quem desenvolve sabe como e complicado criar relatorios para contabilidade ou centro de custos, seja codificando em alguma linguagem ou mesmo tentando encurtar o tempo ou a pressao, usando algum gerador de relatorios, a exemplo do MS Report Service, SAP Crystal Reports, Script Case, etc. As querys scripts mostradas nesse artigo foram desenvolvidas para os seguintes SGBDRs em ordem alfabetica: Firebird 2.5.1 Oracle 11g R2 Postgres 9.1 SQL Server 2012A modelagem aqui apresentada nao seguiu o rigor academico, a exemplo de implementacao de constraints, chaves primarias, etc, bem como os exemplos citados para area Contabil. O objetivo principal deste artigo e mostrar como desenvolver querys para Sistemas Contabeis, houve uma simplificacao com intuito de facilitar o entendimento, entretanto, com os exemplos expostos e possivel adotar em qualquer modelo relacional.Houve tambem uma preocupacao em apresentar os scripts desenvolvidos nos SGBDRs citados no inicio deste documento. Pode-se chegar aos mesmos resultados de uma forma mais performatica e simples; estou apto a sugestoes. Seguem os exemplos em scripts SQL: Criando as tabelas ... (Script para Firebird 2.5.1, Oracle 11g R2, Postgres 9.1, SQL Server 2012) -- USE tempdb; -- Descomentar caso use SQL Server, recomendo criar um banco de teste para os outros SGBDRs.--DROP TABLE plano_conta;CREATE TABLE plano_conta( id_plano_conta varchar(12) PRIMARY KEY -- dados da conta ex. 1.02.01 , descricao varchar(50) -- descricao da conta cadastrada ex. Vendas Externas , tipo_conta varchar(1) -- tipo de conta do cc Analitica ou Sintetica, dominio discreto: A ou S, em situacao de producao merece uma constraint check); --DROP TABLE lancamento;CREATE TABLE lancamento ( id_lancamento integer PRIMARY KEY -- id do lancamento, recomenda-se auto incremento, mas para simplifcar fica sem auto incremento , dt_lancamento date -- data do lancamento , numero_doc varchar(40) -- numero do documento a ser informado , id_plano_conta varchar(12) -- chave estrangeira para a tabela plano_conta, mas para simplificar apenas iremos convencionar, nao sera habilitado a FK, recomendo colocar not null , tipo_lancamento varchar(1) -- tipo de lancamento 'E' = Entrada 'S' = Saida , historico varchar(100) -- historico do lancamento , valor_lancamento numeric(15,2) -- valor informado );Povoando os tabelas...-- Receitas INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('1','Receita','S');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('1.1','Vendas Internas','S');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('1.1.1','Escola','A');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('1.1.2','Escritorio','A');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('1.2','Vendas Externas','S');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('1.2.1','Livro','A');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('1.2.2','Brinquedos','A'); -- Despesas INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('2','Despesas','S');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('2.1','Fornecedores','S');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('2.1.1','Nacional','A');INSERT INTO plano_conta (id_plano_conta, descricao, tipo_conta) VALUES ('2.1.2','Importado','A');INSERT INTO plano_conta