[firebase-br] CTE firebird. como usar o case junto com um select

Gustavo Novaes gutonovaes19 em gmail.com
Terça Julho 7 14:33:41 -03 2020


Boa tarde,

Estou criando minha 1a CTE (aliás, é a 1a a dar "mais ou menos certo" de
várias tentativas frustradas).
Tenho uma

   - tabela de empresas chamada MONIVEL1
   - tabela de contratos chamada HSCTRATO
   - tabela de bloqueios temporarios de empresas chamada MOBLOQNV1

Os contratos e bloqueios são orientados por período, ou seja, tenho datas
de inicio e fim para os eventos de cada empresa.

Preciso listar as empresas do cadastros e indicar para cada uma, sua
situação em relação à contratos e a bloqueios.

Na CTE no final desse e-mail, que tentei fazer foi:
....
(SELECT DISTINCT(NIVEL1) FROM COM_CONTRATO WHERE COM_CONTRATO.NIVEL1 =
AB.NIVEL1) ComContrato
 CASE COMCONTRATO
       WHEN COMCONTATO = AB.NIVEL1 THEN 'Possui contrato Ativo'
       ELSE 'SEM CONTRATO ATIVO'
END STATUSCONTRATO,
......
O resultado esperado seria uma lista contendo:
CODEMPRESA, NOMEDA EMPRESA, COM CONTRATO/SEMCONTRATO, NUNCA TEVE CONTRATO,
BLOQUEADA/NÃO BLOQUEADA.

Segue abaixo a CTE completa.

Aceito críticas e sugestões, pelo que, desde já, agradeço.



WITH COM_CONTRATOAS (
/* DAS EMPRESAS CADASTRADAS (MONIVEL1 É A TABELA) QUAIS TEM CONTRATO
REGISTRADO E EM ATIVIDADE */
SELECT NIVEL1 FROM MONIVEL1
WHERE
NIVEL1 IN (SELECT DISTINCT(NIVEL1) FROM HSCTRATO WHERE
             (HSCTRATO.DATAINICIO <= CURRENT_DATE) AND
             ((HSCTRATO.DATAFIM IS NULL) OR (HSCTRATO.DATAFIM >
CURRENT_DATE)))
),
SEM_CONTRATOS AS(
/* DAS EMPRESAS CADASTRADAS QUAIS NUNCA TIVERAM CONTRATOS */
SELECT NIVEL1 FROM MONIVEL1 WHERE NIVEL1 NOT IN (SELECT DISTINCT(NIVEL1)
FROM HSCTRATO)),
BLOQUEADAS AS (
/*DAS EMPRESAS CADASTRADAS, QUAIS ESTÃO COM ATENDIMENTO SUSPENSO  */
SELECT DISTINCT(NIVEL1) FROM MOBLOQN1 WHERE
                 (MOBLOQN1.DATABLOQUEIO <= CURRENT_DATE) AND
                 ((MOBLOQN1.DESBLOQUEADOEM IS NULL) OR
(MOBLOQN1.DESBLOQUEADOEM > CURRENT_DATE))
),
EMPRESAS AS (
/* LISTAR AS EMPRESAS E OS STATUS ACIMA PARA CADA UMA DELAS */
SELECT AB.NOMEEMP, AB.NIVEL1,
     *(SELECT DISTINCT(NIVEL1) FROM COM_CONTRATO WHERE COM_CONTRATO.NIVEL1
= AB.NIVEL1) ComContrato,*
     (SELECT DISTINCT(NIVEL1) FROM SEM_CONTRATO WHERE SEM_CONTRATO.NIVEL1 =
AB.NIVEL1) NuncaTeveContrato,
     (SELECT NIVEL1 FROM BLOQUEADAS WHERE BLOQUEADAS.NIVEL1 = AB.NIVEL1)
Bloqueada
FROM MONIVEL1 AB
)
SELECT * FROM EMPRESAS

*Gustavo Novaes  Tortorelli*


Mais detalhes sobre a lista de discussão lista