titulo: SaldosContasAperfeiçoado sql: PARAMETERS [Data] DateTime; (Select C.Codigo as CodConta, C.DesConta As Conta, (Select Sum(L.Valor) From Lancamentos As L Where L.CodConta LIKE C.Codigo & '*' And DateDiff('d', [Data], L.Data) <=0 And L.Realizado ='S' ) As [Saldo do realizado], (Select Sum(L.Valor) From Lancamentos As L Where L.CodConta LIKE C.Codigo & '*' And DateDiff('d', [Data], L.Data) <=0 And L.Realizado = '?' And L.Valor < 0) As [Saídas por baixar] , (Select Sum(L.Valor) From Lancamentos As L Where L.CodConta LIKE C.Codigo & '*' And DateDiff('d', [Data], L.Data) <=0 And L.Realizado = '?' And L.Valor > 0) As [Entradas por baixar] , (Select Sum(L.Valor) From Lancamentos As L Where L.CodConta LIKE C.Codigo & '*' And DateDiff('d', [Data], L.Data) <=0 And L.Realizado <> 'N' And L.Realizado <> 'E' ) As [Disponível após baixas] From Contas as C where C.Codigo <> '000' And C.Excluida = false GROUP BY C.Codigo, C.DesConta) UNION (SELECT '9998' AS CodConta, NULL AS Conta, NULL AS [Saldo do realizado], NULL AS [Saídas por baixar], NULL AS [Entradas por baixar], NULL AS [Disponível após baixas] FROM Serial WHERE True=True); UNION (SELECT '9999' AS CodConta, 'SALDOS GLOBAIS' AS Conta, (Select Sum(L.Valor) From Lancamentos as L where DateDiff('d', [Data], L.Data) <=0 And L.Realizado ='S') AS [Saldo do realizado], (Select Sum(L.Valor) From Lancamentos as L where DateDiff('d', [Data], L.Data) <=0 And L.Realizado = '?' And L.Valor < 0 ) AS [Saídas por baixar], (Select Sum(L.Valor) From Lancamentos as L where DateDiff('d', [Data], L.Data) <=0 And L.Realizado = '?' And L.Valor > 0) AS [Entradas por baixar], (Select Sum(L.Valor) From Lancamentos as L where DateDiff('d', [Data], L.Data) <=0 And L.Realizado <> 'N' And L.Realizado <> 'E' ) AS [Disponível após baixas] FROM Serial WHERE True=True); comentários: Esta consulta mostra, para cada conta e na data informada, os saldos do que já foi baixado como realizado, os valores de saídas que faltam ser baixados, os valores de entradas que faltam ser baixados e como ficará o saldo disponível após as baixas das saídas e entradas pendentes para baixa. As contas estão ordenadas pelo código interno para que fiquem na ordem da hierarquia na árvore de contas, pois as contas de mais alto nível acumulam os saldos das suas subcontas. Introduz uma linha em branco entre as linhas de saldos de contas e a linha de saldos globais.