ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Como colcar um case no where do firebird 2.5?
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Fev 22, 2019 3:28 pm    Assunto: Como colcar um case no where do firebird 2.5? Responder com Citação

Como colcar um case no where do firebird 2.5?

Código:
SELECT
 FC.CODIGO CODIGO_BOLETO,
 FC.DESCRICAO,
 FC.BOLETO_SEU_NUMERO,
 FC.CODIGO_CLIENTE,
 CL.NOME_BOLETO,
 FC.DATA_QUITACAO AS DTA_PGTO_BOLETO,
 FC.DATA_VENCIMENTO AS DTA_VENC_BOLETO,
 HNG.DATA_EMISSAO_NOTA,
 FC.SITUACAO,
 CL.CNPJ,
 FC.VALOR AS VLR_LANC_BOLETO,
 HNG.VALOR_BASE_NOTA AS VALOR_NOTA,
 HNG.NUMERO_NOTA AS NUMERO_NOTA,
 case cl.tipo_pagamento
 when 'Integração Boleto Fácil' then
   fc.BOLETO_VALOR_PAGO - 1.95
 else
   fc.BOLETO_VALOR_PAGO
 end BOLETO_VALOR_PAGO,

case
   when (FC.DATA_VENCIMENTO >= '10.02.2019') and (fc.boleto_nosso_numero is null) then
     cl.tipo_pagamento
   else
     case
       when cl.tipo_pagamento = 'Boleto' then
         'Boleto'
       when cl.tipo_pagamento = 'Débito Automático' then
         'Débito Automático'
     end
 end tipo_pagamento

FROM
 FINANCEIRO_CONTAS FC
   LEFT JOIN HISTORICO_NOTAS_GERADAS HNG ON (
    hng.id = fc.id_historico
   )
   LEFT JOIN CLIENTE CL ON (
     CL.CODIGO = FC.CODIGO_CLIENTE
   )
WHERE FC.data_quitacao BETWEEN :d1 and :d2
 and
 cl.tipo_pagamento = :P
 and
   CASE WHEN :p = 'Integração Boleto Fácil' THEN
      (fc.boleto_nosso_numero is null)
 end
 and boleto_seu_numero is not null
ORDER BY
 5,6

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree


Editado pela última vez por adriano_servitec em Sex Fev 22, 2019 5:12 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Fev 22, 2019 4:41 pm    Assunto: Responder com Citação

A ideia é, se o parâmetro no where for Integração Boleto Fácil'

quero que seja desta forma
Código:
and ((cl.tipo_pagamento = 'Integração Boleto Fácil')
      and (fc.boleto_nosso_numero is null))


se não for esta escolha no parâmetro a clausula where não pode mostrar
Código:
fc.boleto_nosso_numero is null

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Fev 22, 2019 5:43 pm    Assunto: Responder com Citação

Pelo que entendi, acho que nesse caso será melhor utilizar dois filtros com Or mesmo:

Código:
    ( ( cl.tipo_pagamento = 'Integração Boleto Fácil' and fc.boleto_nosso_numero is null ) or
      ( cl.tipo_pagamento <> 'Integração Boleto Fácil' and fc.boleto_nosso_numero is not null ) )


Espero que ajude


Editado pela última vez por imex em Seg Set 20, 2021 10:15 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Fev 25, 2019 11:52 am    Assunto: Responder com Citação

imex escreveu:
Pelo que entendi, acho que nesse caso será melhor utilizar dois filtros com Or mesmo:

Código:
    ( ( cl.tipo_pagamento = 'Integração Boleto Fácil' and fc.boleto_nosso_numero is null ) or
      ( cl.tipo_pagamento <> 'Integração Boleto Fácil' and fc.boleto_nosso_numero is not null ) )


Espero que ajude


Bom dia Imex, parece que assim da certo


Obrigado.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Fev 25, 2019 5:03 pm    Assunto: Responder com Citação

Hj tenho na tabela cliente o campo CL.tipo_pagamento IS NULL;
Este campo não entra no meu filtro IN, que mostra apenas
Citação:
Boleto;
Débito Automático;
Integração Boleto Fácil;


Mais posso fazer individual o filtro no where
Por exemplo
Se escolher só "Integração Boleto Fácil" esta me trazendo todos que são CL.tipo_pagamento = Integração Boleto Fácil e os que são CL.tipo_pagamento = null

Ha possibilidade de trazer apenas estes nulos se eu selecionar só os 3 modos acimas de uma vez no IN
Este sistema que estou trabalhando ja tem um editor de relatorios e não consigo manipular ele. Tipo um botão pra mostrar todos, pelo jeito ele ja possui
um select que o filtro só traga os que não for not null na condição, ai não sei como tratar estes null's
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Fev 26, 2019 10:53 am    Assunto: Responder com Citação

Existem apenas esse 3 valores e os nulos nesse campo? Se sim, acho que uma alternativa seria remover o filtro desse campo.
Se existem outros valores alem desses 3 e dos nulos, acho que uma alternativa para não adicionar um filtro específico para os nulos (já que null não é igual a nada e não é diferente de nada) seria utilizar a função Coalesce para trocar os nulos por outro valor no filtro. Ex:

Código:
coalesce(CL.tipo_pagamento, 'Integração Boleto Fácil') in ('Boelto', 'Débito Automático', 'Integração Boleto Fácil')


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Fev 26, 2019 11:07 am    Assunto: Responder com Citação

imex escreveu:
Existem apenas esse 3 valores e os nulos nesse campo? Se sim, acho que uma alternativa seria remover o filtro desse campo.
Se existem outros valores alem desses 3 e dos nulos, acho que uma alternativa para não adicionar um filtro específico para os nulos (já que null não é igual a nada e não é diferente de nada) seria utilizar a função Coalesce para trocar os nulos por outro valor no filtro. Ex:

Código:
coalesce(CL.tipo_pagamento, 'Integração Boleto Fácil') in ('Boelto', 'Débito Automático', 'Integração Boleto Fácil')


Espero que ajude


Citação:
Existem apenas esse 3 valores e os nulos nesse campo? Se sim, acho que uma alternativa seria remover o filtro desse campo.
Resposta SIM

Como assim remover o filtro?
Eu tenho uma lista que infelizmente vem estes 3 itens, porém tem nullos que podem vir também.
Só que posso escolher no caso exemplo só BOLETOS ai esta vindo boletos e null
Eu queria ja que não aparece estes null na lista mostrar apenas se fosse com os 3 da lista na clausula where, não quando é um ou dois selecionados.

Porque desta forma com coalesce
Código:
coalesce(CL.tipo_pagamento, 'Integração Boleto Fácil') in ('Boleto', 'Débito Automático',  'Integração Boleto Fácil')


Se executar os 3 da lista não aparece os nulos.

Obrigado Imex
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Fev 26, 2019 11:14 am    Assunto: Responder com Citação

Como fica o filtro quando tem apenas um item por exemplo? Fica mais ou menos assim?

Código:
( CL.tipo_pagamento = 'Boleto' or CL.tipo_pagamento is null )


Se não tiver essa condição específica (is null) ou o uso da função Coalesce ou semelhante, acredito que os registros com null não deveriam ser retornados.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Fev 26, 2019 11:34 am    Assunto: Responder com Citação

imex escreveu:
Como fica o filtro quando tem apenas um item por exemplo? Fica mais ou menos assim?

Código:
( CL.tipo_pagamento = 'Boleto' or CL.tipo_pagamento is null )


Se não tiver essa condição específica (is null) ou o uso da função Coalesce ou semelhante, acredito que os registros com null não deveriam ser retornados.
O problema Imex é que eu preciso trazer os null também porque tem valor, mais não tem nada no campo tipo_pagamento

Só que preciso que eles apareçam apenas quando na lista for chamado os 3 que existe.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Fev 26, 2019 12:19 pm    Assunto: Responder com Citação

Se existem só os 3 valores e os nulos e você quer que retorne tudo, então não vejo porque colocar o campo tipo_pagamento no Where.

Se o usuário selecionou por exemplo só Boleto e o filtro ficou conforme segue abaixo:

Código:
CL.tipo_pagamento = 'Boleto'


ou ainda

Código:
CL.tipo_pagamento in ('Boleto')


Os registros com nulos não deveriam ser retornados. A não ser que existam outros filtros e o operador Or; nesse caso seria necessário verificar como está a combinação desses filtros e o uso dos parênteses.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Fev 26, 2019 1:45 pm    Assunto: Responder com Citação

imex escreveu:
Se existem só os 3 valores e os nulos e você quer que retorne tudo, então não vejo porque colocar o campo tipo_pagamento no Where.

Se o usuário selecionou por exemplo só Boleto e o filtro ficou conforme segue abaixo:

Código:
CL.tipo_pagamento = 'Boleto'


ou ainda

Código:
CL.tipo_pagamento in ('Boleto')


Os registros com nulos não deveriam ser retornados. A não ser que existam outros filtros e o operador Or; nesse caso seria necessário verificar como está a combinação desses filtros e o uso dos parênteses.
Sim neste caso vem só um, meu problema é quando colocar os 3 na clausula que ai quero que venha os null também
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Fev 26, 2019 2:28 pm    Assunto: Responder com Citação

Se for possível acredito que a melhor alternativa seria remover o campo do Where quando for para retornar tudo, que são as 3 opções e nulos.

Outra alternativa seria adicionar uma segunda condição com o Or para retornar os nulos:
Código:
( ( CL.tipo_pagamento in ('Boleto', 'Débito Automático',  'Integração Boleto Fácil') ) or ( CL.tipo_pagamento is null ) )


E outra alternativa seria utilizar a função Coalesce para trocar o null por outro valor existente dentro do In tornando a condição verdadeira. Ex:
Código:
coalesce(CL.tipo_pagamento, '') in ('Boelto', 'Débito Automático', 'Integração Boleto Fácil', '')


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Fev 26, 2019 3:23 pm    Assunto: Responder com Citação

imex escreveu:
Se for possível acredito que a melhor alternativa seria remover o campo do Where quando for para retornar tudo, que são as 3 opções e nulos.

Outra alternativa seria adicionar uma segunda condição com o Or para retornar os nulos:
Código:
( ( CL.tipo_pagamento in ('Boleto', 'Débito Automático',  'Integração Boleto Fácil') ) or ( CL.tipo_pagamento is null ) )


E outra alternativa seria utilizar a função Coalesce para trocar o null por outro valor existente dentro do In tornando a condição verdadeira. Ex:
Código:
coalesce(CL.tipo_pagamento, '') in ('Boelto', 'Débito Automático', 'Integração Boleto Fácil', '')


Espero que ajude
Então Imex, eu tenho aqui um listbox que a pessoa define o que quer neste listbox podendo ter até os 3 na lista, ai teria que reconhecer quando é os 3, e isso ta dificil pq quem fez este projeto ja definiu para que este form seja feito para ser usado pelo próprio cliente personalizar seus relatórios, ele nem precisa do delphi para executar faz tudo neste form pré montado, o problema é eu saber via sql quando to com todos os 3 preenchidos no where. E não posso mexer no fonte deste editor de relatório para não ferra o o sistema todo.
To pensando em talvez uma SP pra contornar este problema, contando quando vem os 3 ai aplicar o filtro com os nulos, mais como faria algo assim, pois SP o sistema ali aceita.
Tem alguma ideia?
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Fev 26, 2019 4:26 pm    Assunto: Responder com Citação

Desculpe mas não consigo ver uma forma de resolver isso sem fazer alguma alteração no código desse Form. Acho que até mesmo para usar uma SP seria necessária uma alteração, e talvez até maior.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Fev 26, 2019 4:38 pm    Assunto: Responder com Citação

imex escreveu:
Desculpe mas não consigo ver uma forma de resolver isso sem fazer alguma alteração no código desse Form. Acho que até mesmo para usar uma SP seria necessária uma alteração, e talvez até maior.
Entendo, fica difícil aqui sem poder mexer no código mesmo.

Obrigado Imex.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB