-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Leonardo,

Cada soma dessas que você menciona possui critérios de soma distintos
então não há solução trivial em um único e simples SELECT. Sugestões
práticas seguem:

~ #1) rode 4 consultas de soma distintas; ex:

~     SELECT SUM(vr_original)
~     FROM <tabela>
~     WHERE (databaixa IS NULL) AND (datavencimento < data_hoje);

~     ...

~ #2) rode uma consulta com UNION e gere as quatro somas cada uma
~     como uma linha de seu resultado; ex:

~     SELECT 'vencidas' as descricao, SUM(vr_original)
~     FROM <tabela>
~     WHERE (databaixa IS NULL) AND (datavencimento < data_hoje)

~     UNION

~     SELECT 'a vencer' as descricao, SUM(vr_original)
~     FROM <tabela>
~     WHERE (databaixa IS NULL) AND (datavencimento > data_hoje)

~     ...

~ #3) se seu banco permite consultas na parte dos campos, rode um
~     SELECT para cada soma na parte dos campos; ex:

~     SELECT
~       (SELECT SUM(vr_original)
~        FROM <tabela>
~        WHERE (databaixa IS NULL) AND
~              (datavencimento < data_hoje)) as vencidas,
~       (SELECT SUM(vr_original)
~        FROM <tabela>
~        WHERE (databaixa IS NULL) AND
~              (datavencimento > data_hoje)) as a_vencer,

~     ...

~ #4) se seu banco permite funções na parte dos campos, crie uma
~     função para cada soma e utilize-as para cada soma na parte
~     dos campos; ex:

~     SELECT
~       fxContasVencidas(data_hoje) as vencidas,
~       fxContasAVencer(data_hoje) as a_vencer,
~     ...

NOTAS: observe que os operadores de data devem ignorar a parte de tempo
a não ser que você queira explicitamente considerá-los; assim, num banco
como o PostgreSQL você pode estar olhando para uma necessidade de CAST
para DATE caso tenha utilizado campos TIMESTAMP nas colunas de data, por
exemplo; quanto ao data_hoje, a maioria dos bancos possui função para
isso- se não for esse seu caso, utilize um parâmetro na consulta do Delphi.

Veja também que apenas a opção #1 contempla mais de uma consulta no lado
do Delphi. No lado do banco, todas elas são aproximadamente equivalentes
exceto, talvez, pela UNION que pode ficar mais pesada. Mas isso depende
muito de diversos fatores no lado do banco, claro. Eu, particularmente,
não gosto muito de trabalhar com UNION. Só faço mesmo quando preciso
"fabricar" uma linha em uma tabela como, por exemplo:

~  SELECT id, nome
~  FROM cPessoa

~  UNION

~  SELECT -1, '<todas as pessoas>'

~  ORDER BY nome

Esse resultado permite, por exemplo, em configurações de relatórios, ter
um registro que me indica que é pra selecionar tudo daquela entidade (e
que normalmente é a opção padrão).

Cordialmente,

Demian Lessa


Leonardo wrote:
|
| Em um cadastro de Titulos  tenho de selecionar um determinado clinte
| e somar:1º todos os titulos em aberto vencidos
|         2º A vencer
|         3º Pagos em dia
|         4º Pagos em atraso
|
| Tenho todas as informacoes em um unica tabela
|
| Cliente
| Vr orginal
| Saldo
| Data da Baixa
| Data do vencimento
|
| Como , se possivel, fazer isto em uma unica instrução select?
|
| Agradeço desde já
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (MingW32)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFB0r+YYTVEtRexYaQRAqxbAJ0bXxiBVNzJqlbn5oWOOOkpWnvZBACeOhJ+
6p9nQB2pqufQG75blGD4X/M=
=HIB1
-----END PGP SIGNATURE-----


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a