Veja bem, eu nao uso o Sql Server eu uso o Firebird e com essa consulta 
funcionou e esta rodando no delphi6 perfeitamente!!!

select conta, descricao, GR,
CASE WHEN valor > 0 and cd = 'D' THEN 0 ELSE valor END valordeb,
CASE WHEN valor > 0 and cd = 'C' THEN 0 ELSE valor END valorCred,
(CASE WHEN valor > 0 and cd = 'D' THEN 0 ELSE valor END ) + (CASE WHEN valor > 
0 and cd = 'C' THEN 0 ELSE valor END) valoratual
from lancamentos l, planocontas p
where l.codred = p.codred
and cliente = '1'



From: Rubem Nascimento da Rocha 
Sent: Wednesday, June 04, 2008 10:23 AM
To: delphi-br@yahoogrupos.com.br 
Subject: RE: Res: Res: [delphi-br] Sintaxe SQL



Companheiro, apesar do SQL Server ser baseado no Sybase, essa sintaxe não é 
suportada por ele. Fiz o teste. Uso SQL Server 2005 no trabalho. Ele não 
reconhece colunas que criamos no SELECT para montarmos expressões. Tenho um 
sistema de vendas usado pela empresa e com uma tabela de vendas tentei simular 
uma situação parecida como esta de débitos e créditos, usando CASE. Usei o 
seguinte SQL:

select codigo, dtcadastro,
case when status = '1' then valorprod end valor_aberto,
case when status = '2' then valorprod end valor_confirmado,
case when status = '3' then valorprod end valor_cancelado,
valor_aberto - valor_confirmado - valor_cancelado diff
from vendas
where month(dtcadastro) = 6 and year(dtcadastro) = 2008

A coluna diff é montada com uma expressão usando as colunas criadas no SELECT. 
Olha o que o SQL Server 2005 me retornou:

<>
Msg 207, Level 16, State 3, Line 1
Invalid column name 'valor_aberto'.
Msg 207, Level 16, State 3, Line 1
Invalid column name 'valor_confirmado'.
Msg 207, Level 16, State 3, Line 1
Invalid column name 'valor_cancelado'.
<>

Depois, refiz o SQL da seguinte forma:

select codigo, dtcadastro, valor_aberto, valor_confirmado, valor_cancelado,
valor_aberto - valor_confirmado - valor_cancelado diff
from (select codigo, dtcadastro,
case when status = '1' then valorprod else 0.00 end valor_aberto,
case when status = '2' then valorprod else 0.00 end valor_confirmado,
case when status = '3' then valorprod else 0.00 end valor_cancelado
from vendas
where month(dtcadastro) = 6 and year(dtcadastro) = 2008) vendas

Rodei e funcionou!

Conclusão: o Sybase pode aceitar, mas no SQL Server, como disse anteriormente, 
o uso de colunas criadas no SELECT não é aceito para montar expressões!

Sds.

________________________________

To: delphi-br@yahoogrupos.com.br
From: [EMAIL PROTECTED]
Date: Wed, 4 Jun 2008 06:00:40 -0700
Subject: Res: Res: [delphi-br] Sintaxe SQL

Realmente não funciona no FireBird.

Mas em Sybase funciona. O Sybase permite sobre efetuar operação com colunas 
calculadas dentro de um mesmo Select. Provavelmente duncionará em SQL Server.

select data,
(CASE WHEN valor> 0 THEN 0 ELSE valor END) debito,
(CASE WHEN valor <= 0 THEN 0 ELSE valor END) credito,
(debito - credito ) diferenca
from cobranca

Luciano Calenzani Simões

----- Mensagem original ----
De: Rubem Nascimento da Rocha <[EMAIL PROTECTED]>
Para: delphi-br@yahoogrupos.com.br
Enviadas: Quarta-feira, 4 de Junho de 2008 9:36:52
Assunto: RE: Res: [delphi-br] Sintaxe SQL

Nem o SQL Server e nem o FireBird aceitam essa sintaxe! Se for pra SQL Server 
2005, eu faria assim:

select conta, descricao, valordeb, valorCred, valordeb - valorcred from
(select conta, descricao,CASE WHEN valor> 0 and cd = 'D' THEN 0 ELSE valor END 
valordeb,
CASE WHEN valor> 0 and cd = 'C' THEN 0 ELSE valor END valorCred,
(ValorDeb - ValorCred) as Diferenca
from lancamentos l, planocontas p
where l.codred = p.codred
and cliente = '1')

Sds.

____________ _________ _________ __

To: [EMAIL PROTECTED] os.com.br
From: simoesluciano@ yahoo.com. br
Date: Wed, 4 Jun 2008 04:07:21 -0700
Subject: Res: [delphi-br] Sintaxe SQL

select conta, descricao,
CASE WHEN valor> 0 and cd = 'D' THEN 0 ELSE valor END valordeb,
CASE WHEN valor> 0 and cd = 'C' THEN 0 ELSE valor END valorCred,
(ValorDeb - ValorCred) as Diferenca
from lancamentos l, planocontas p
where l.codred = p.codred
and cliente = '1'

Luciano Calenzani Simões

----- Mensagem original ----
De: Ioney Hotmail 
Para: [EMAIL PROTECTED] os.com.br
Enviadas: Terça-feira, 3 de Junho de 2008 22:53:03
Assunto: [delphi-br] Sintaxe SQL

Ola Pessoal, eu tenho essa consulta que esta funcionando corretamente

select conta, descricao,
CASE WHEN valor> 0 and cd = 'D' THEN 0 ELSE valor END valordeb,
CASE WHEN valor> 0 and cd = 'C' THEN 0 ELSE valor END valorCred
from lancamentos l, planocontas p
where l.codred = p.codred
and cliente = '1'

agora eu quero criar uma outra coluna para diminuir o valordeb do valorcred
como fazer isso?

__________________________________________________________
Cansado de espaço para só 50 fotos? Conheça o Spaces, o site de relacionamentos 
com até 6,000 fotos!
http://www.amigosdomessenger.com.br

 

[As partes desta mensagem que não continham texto foram removidas]

Responder a