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 Anterior  1, 2
 
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 Mar 08, 2019 11:48 am    Assunto: Responder com Citação

Eu não estou conseguindo filtrar 'Integração Boleto Fácil' no select

Se eu fizer assim
Código:
SELECT
   FC.BB_CODE,

   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) AND
         (FC.BB_CODE IS NOT NULL) THEN
         'Integração Boleto Fácil'
      ELSE
         cl.tipo_pagamento
   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   
  (cl.tipo_pagamento in('Boleto','Integração Boleto Fácil') or cl.tipo_pagamento is null)

   and FC.data_quitacao BETWEEN :d1 and :d2   
  and (((FC.BB_CODE IS NOT NULL and fc.boleto_nosso_numero is null) or cl.tipo_pagamento is null) or
      ((FC.BB_CODE IS NULL and fc.boleto_nosso_numero is not null) or cl.tipo_pagamento is null))

ORDER BY
  tipo_pagamento desc, 5, 6


Aparece todos que eu preciso

Mais se eu fizer assim
Código:
SELECT
   FC.BB_CODE,

   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) AND
         (FC.BB_CODE IS NOT NULL) THEN
         'Integração Boleto Fácil'
      ELSE
         cl.tipo_pagamento
   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   
  (cl.tipo_pagamento in('Integração Boleto Fácil') or cl.tipo_pagamento is null)

   and FC.data_quitacao BETWEEN :d1 and :d2   
  and (((FC.BB_CODE IS NOT NULL and fc.boleto_nosso_numero is null) or cl.tipo_pagamento is null) or
      ((FC.BB_CODE IS NULL and fc.boleto_nosso_numero is not null) or cl.tipo_pagamento is null))

ORDER BY
  tipo_pagamento desc, 5, 6


Só vem os null e não os Integrraçao boleto facil

Preciso trazer o que esta no IN + os null e não estou conseguindo.
_________________
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 Mar 08, 2019 2:37 pm    Assunto: Responder com Citação

Existem registros com o campo tipo_pagamento da tabela Cliente igual a 'Integração Boleto Fácil' ou seriam os registros em que esse Case abaixo retorna 'Integração Boleto Fácil'?

Código:
   CASE
      WHEN
         (FC.DATA_VENCIMENTO >= '10.02.2019')  AND
         (FC.BOLETO_NOSSO_NUMERO IS NULL) AND
         (FC.BB_CODE IS NOT NULL) THEN
         'Integração Boleto Fácil'
      ELSE
         cl.tipo_pagamento
   END
   tipo_pagamento


Uma alternativa para obter os registros em que esse Case retorna 'Integração Boleto Fácil' seria utilizar as mesmas condições do Case no Where.

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: Sex Mar 08, 2019 3:34 pm    Assunto: Responder com Citação

Imex meu select deve ficar assim?

Código:
 SELECT
   FC.BB_CODE,

   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
      WHEN
         (FC.DATA_VENCIMENTO >= '10.02.2019')  AND
         (FC.BOLETO_NOSSO_NUMERO IS NULL) AND
         (FC.BB_CODE IS NOT NULL)  AND
         (tipo_pagamento = '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) AND
         (FC.BB_CODE IS NOT NULL) AND
         (cl.tipo_pagamento = 'Integração Boleto Fácil') THEN
         'Integração Boleto Fácil'
      ELSE
         cl.tipo_pagamento
   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

  (cl.tipo_pagamento in('Integração Boleto Fácil', 'Boleto') or cl.tipo_pagamento is null)

  and FC.data_quitacao BETWEEN :d1 and :d2

  and ( (
         (FC.BOLETO_NOSSO_NUMERO IS NULL) AND
         (FC.BB_CODE IS NOT NULL) AND
         (cl.tipo_pagamento = 'Integração Boleto Fácil')
         or cl.tipo_pagamento is null)
         or
         (
         (FC.BOLETO_NOSSO_NUMERO IS NOT NULL) AND
         (FC.BB_CODE IS NULL) AND
         (cl.tipo_pagamento <> 'Integração Boleto Fácil')
         or cl.tipo_pagamento is null )

        )

ORDER BY
  tipo_pagamento desc, 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
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 Mar 08, 2019 4:14 pm    Assunto: Responder com Citação

Existem registros com o campo tipo_pagamento da tabela Cliente igual a 'Integração Boleto Fácil'?
Você precisa filtrar apenas por tipo de pagamento e data da quitação? Ou tem mais algum filtro?
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 Mar 08, 2019 4:31 pm    Assunto: Responder com Citação

imex escreveu:
Existem registros com o campo tipo_pagamento da tabela Cliente igual a 'Integração Boleto Fácil'?
SIM
Você precisa filtrar apenas por tipo de pagamento e data da quitação? Ou tem mais algum filtro?
SIM

_________________
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 Mar 08, 2019 5:26 pm    Assunto: Responder com Citação

Experimente fazer uns testes mais ou menos dessa forma:

Código:
select * from

(
SELECT
   FC.BB_CODE,

   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) AND
         (FC.BB_CODE IS NOT NULL) THEN
         'Integração Boleto Fácil'
      ELSE
         cl.tipo_pagamento
   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
) as t

WHERE   
  (cl.tipo_pagamento in('Boleto','Integração Boleto Fácil') or cl.tipo_pagamento is null)


ORDER BY
  tipo_pagamento desc, 5, 6


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: Sex Mar 08, 2019 6:13 pm    Assunto: Responder com Citação

imex escreveu:
Experimente fazer uns testes mais ou menos dessa forma:

Código:
select * from

(
SELECT
   FC.BB_CODE,

   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) AND
         (FC.BB_CODE IS NOT NULL) THEN
         'Integração Boleto Fácil'
      ELSE
         cl.tipo_pagamento
   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
) as t

WHERE   
  (cl.tipo_pagamento in('Boleto','Integração Boleto Fácil') or cl.tipo_pagamento is null)


ORDER BY
  tipo_pagamento desc, 5, 6


Espero que ajude


Deu erro no ultimo where Imex
Citação:
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
CL.TIPO_PAGAMENTO.
At line 53, column 7.

_________________
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 Mar 08, 2019 7:43 pm    Assunto: Responder com Citação

Experimente trocar o alias CL por T ou simplesmente remova o alias CL.

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: Sáb Mar 09, 2019 11:49 am    Assunto: Responder com Citação

imex escreveu:
Experimente trocar o alias CL por T ou simplesmente remova o alias CL.

Espero que ajude
Da certo Imex, porém o componente que stou usando pelo que vi não esta aceitando esta forma de subselect, tem outra forma?
_________________
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: Seg Mar 11, 2019 9:20 am    Assunto: Responder com Citação

Experimente dessa forma:

Código:
SELECT
   FC.BB_CODE,

   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) AND
         (FC.BB_CODE IS NOT NULL) THEN
         'Integração Boleto Fácil'
      ELSE
         cl.tipo_pagamento
   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
   (
      CASE
         WHEN
            (FC.DATA_VENCIMENTO >= '10.02.2019')  AND
            (FC.BOLETO_NOSSO_NUMERO IS NULL) AND
            (FC.BB_CODE IS NOT NULL) THEN
            'Integração Boleto Fácil'
         ELSE
            cl.tipo_pagamento
      END in ('Integração Boleto Fácil')

      or cl.tipo_pagamento is null
   )

   and FC.data_quitacao BETWEEN :d1 and :d2   

ORDER BY
  tipo_pagamento desc, 5, 6


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: Seg Mar 11, 2019 10:14 am    Assunto: Responder com Citação

imex escreveu:
Experimente dessa forma:

Código:
SELECT
   FC.BB_CODE,

   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) AND
         (FC.BB_CODE IS NOT NULL) THEN
         'Integração Boleto Fácil'
      ELSE
         cl.tipo_pagamento
   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
   (
      CASE
         WHEN
            (FC.DATA_VENCIMENTO >= '10.02.2019')  AND
            (FC.BOLETO_NOSSO_NUMERO IS NULL) AND
            (FC.BB_CODE IS NOT NULL) THEN
            'Integração Boleto Fácil'
         ELSE
            cl.tipo_pagamento
      END in ('Integração Boleto Fácil')

      or cl.tipo_pagamento is null
   )

   and FC.data_quitacao BETWEEN :d1 and :d2   

ORDER BY
  tipo_pagamento desc, 5, 6


Espero que ajude
Ajudou sim Imex, muito 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
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 Anterior  1, 2
Página 2 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