[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