Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Fev 22, 2019 3:28 pm Assunto: Como colcar um case no where do firebird 2.5? |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Fev 22, 2019 5:43 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Fev 25, 2019 5:03 pm Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Fev 26, 2019 10:53 am Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Fev 26, 2019 11:07 am Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Fev 26, 2019 11:14 am Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Fev 26, 2019 11:34 am Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Fev 26, 2019 12:19 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Fev 26, 2019 1:45 pm Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Fev 26, 2019 2:28 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Fev 26, 2019 3:23 pm Assunto: |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Fev 26, 2019 4:26 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
|