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]