[firebase-br] Unir sentenças SQL

Sandro Souza escovadordebits em gmail.com
Qui Jun 11 09:11:12 -03 2009


Bom dia/tarde Tetraetila.

Grande Tetraetila, da forma que está o SELECT dos débitos e dos créditos,
mais de um registro pode ser retornado, ou seja, se dentro do intervalo de
datas informado (no campo A005_DATA), houverem mais de um valor para o campo
A005_DEBI (no SELECT dos débitos) ou no campo A005_CRED (no SELECT dos
créditos), mais de um registro será retornado, cada um com o seu respectivo
somatório de valores para aquele crédito ou débito.

Sendo assim, o comando UPDATE falha quando ocorre essa situação, ou seja,
quando o SELECT dos créditos e/ou débitos retorna mais de um registro, o
UPDATE falha e retorna uma mensagem de erro.

Dessa forma, precisamos que você explique melhor o relacionamento entre
essas tabelas para podermos planejar melhor como efetuar essa atualização de
valores.

Por exemplo, o SELECT dos créditos e débitos é baseado em um período de
datas, e aparentemente, nada tem a ver com o campo A005_TIPO (suponho que
haja esse campo). Pelo que vemos no código do INSERT, nenhum campo de data é
preenchido, portanto, que regra utilizaríamos para atualizar os registros
corretamente de acordo com o período?

Da forma que está o UPDATE, todos os registros da tabela BAL_PATRI tem seus
campos VR_DEBI, VR_CRED e SAL_F alterados para os mesmos valores, sem
qualquer condição de filtragem.

Resumindo, faltam mais informações para que possamos entender completamente
o cenário e podermos te ajudar da melhor forma.

Espero ter ajudado mais que atrapalhado. :D

2009/6/10 tetraetila® <tetraetila em gmail.com>

> Olá Pessoal
>
> Eu tenho a seguinte sentença que faz um insert a partir de um select, Ok!
>
> insert into bal_patri ( a004_redu, a004_tipo, a004_estr1, a004_estr,
> a004_desc ) select a004_redu, a004_tipo, a004_estr as a004_estr1, a004_estr,
> a004_desc from a029004_tbl where a004_tipo = 'A'
>
> Ok! Gero um arquivo com os dados.
>
> Em outra sentença eu apuro o valor dos débitos:
>
> select a005_debi, sum( a005_valo ) as DEBITO from a029005_tbl where
> a005_data <= '31.01.2008' group by a005_debi
>
> e da mesma forma eu apuro os créditos:
>
> select a005_cred, sum( a005_valo ) as CREDITO from a029005_tbl where
> a005_data <= '31.01.2008' group by a005_cred
>
> e SAL_F = crédito - débito
>
> Gero mais arquivos...
>
> Eu gostaria de unir a primeira sentença um update com a segunda e terceira
> sentenças, ou seja fazer o insert com o select e
> em seguinte o update de VR_DEBI e VR_CRED e SAL_F ( SAL_F equivale a
> VR_CRED - VR_DEBI ).
>
> update bal_patri set VR_DEBI = (
> select a005_debi, sum( a005_valo ) as DEBITO from a029005_tbl where
> a005_data <= '31.01.2008' group by a005_debi )
>
> update bal_patri set VR_CRED = (
> select a005_cred, sum( a005_valo ) as CREDITO from a029005_tbl where
> a005_data <= '31.01.2008' group by a005_cred )
>
> update bal_patri set SAL_F = ( VR_CRED - VR_DEBI )
>
> Isto tudo em uma única sentença, pois eu gero um arquivo tipo DBF para cada
> sentença e poderia gerar apenas um para a sentença inteira diminuiria bem as
> linhas de código.
>
>
> Algo assim. Obrigado!
>
> Adilson
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista