Usuário com melhor resposta
CASE TRAZENDO VALORES APENAS SE O VALOR FOR NULO NUM DETERMINADO HORARIO

Pergunta
-
Boa tarde, estou com uma case e o problema é que tenho suas situações de resultado na mesma.
1º CASE - trazer resultado que aluno faltou no periodo da manhã. Se o aluno estiver com entrada NULL entre 07h e 09h resultado é "O ALUNO FALTOU"
2º CASE - trazer resultado que o aluno faltou no periodo da tarde. Se o aluno estiver com entrada NULL entre as 13h e as 15h, resultado é o "O ALUNO FALTOU".
CASE WHEN SET4.ENTRADA_ACESSO IS NULL AND SET4.SAIDA_ACESSO IS NULL AND SET4.TIPO='M' THEN '1 - O ALUNO FALTOU AO COLEGIO ' WHEN SET4.ENTRADA_ACESSO IS NULL AND SET4.SAIDA_ACESSO IS NULL AND SET4.TIPO='V' THEN '2 - O ALUNO FALTOU AO COLEGIO ' END
Obs.: tenho o TIPO M para matutino nos horarios da manha e V para vespetino no periodo da tarde, mas preciso de mais um valor certeiro para poder fazer esta consulta funcionar e pelo que vejo será aplicação de horario fixos mesmo com mais uma condição deste CASE, mas ainda não sei como fazer.
CharlesTI.
Respostas
-
Bom dia Junior Galvão.
Cheguei a fazer neste caso porém inserindo um intervalo de datas para poder disparar a case pegando a hora e minuto atual para fazer a comparação.
CASE WHEN SET4.ENTRADA_ACESSO IS NULL AND SET4.SAIDA_ACESSO IS NULL AND SET4.TIPO='M' AND CONVERT(VARCHAR(11),GETDATE(),114) BETWEEN '09:00' AND '13:30' THEN '1 - O ALUNO FALTOU AO COLEGIO ' WHEN SET4.ENTRADA_ACESSO IS NULL AND SET4.SAIDA_ACESSO IS NULL AND SET4.TIPO='V' AND CONVERT(VARCHAR(11),GETDATE(),114) BETWEEN '16:00' AND '20:30' THEN '2 - O ALUNO FALTOU AO COLEGIO ' END
CharlesTI.
- Marcado como Resposta CHARLES.PTU sexta-feira, 25 de maio de 2018 13:23
Todas as Respostas
-
Charles,
Da mesma forma que você adicionou as condições no CASE utilizando o operador lógico condicional AND, vai adicionar esta nova condição, repassando os valores fixos de horário que você deseja.
Se você tiver um campo que armazene a data e hora será bem simples, caso contrário, algumas implementações adicionais serão necessárias.
Veja se o exemplo abaixo te ajuda:
CASE WHEN SET4.ENTRADA_ACESSO IS NULL AND SET4.SAIDA_ACESSO IS NULL AND SET4.TIPO='M' AND HORARIO = '12:00' THEN '1 - O ALUNO FALTOU AO COLEGIO ' WHEN SET4.ENTRADA_ACESSO IS NULL AND SET4.SAIDA_ACESSO IS NULL AND SET4.TIPO='V' AND HORARIO = '18:00' THEN '2 - O ALUNO FALTOU AO COLEGIO ' END
Talvez o uso das funções DatePart() ou GetDate() podem te ajudar.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Bom dia Junior Galvão.
Cheguei a fazer neste caso porém inserindo um intervalo de datas para poder disparar a case pegando a hora e minuto atual para fazer a comparação.
CASE WHEN SET4.ENTRADA_ACESSO IS NULL AND SET4.SAIDA_ACESSO IS NULL AND SET4.TIPO='M' AND CONVERT(VARCHAR(11),GETDATE(),114) BETWEEN '09:00' AND '13:30' THEN '1 - O ALUNO FALTOU AO COLEGIO ' WHEN SET4.ENTRADA_ACESSO IS NULL AND SET4.SAIDA_ACESSO IS NULL AND SET4.TIPO='V' AND CONVERT(VARCHAR(11),GETDATE(),114) BETWEEN '16:00' AND '20:30' THEN '2 - O ALUNO FALTOU AO COLEGIO ' END
CharlesTI.
- Marcado como Resposta CHARLES.PTU sexta-feira, 25 de maio de 2018 13:23
-
Charles,
Ok, mas mesmo assim não deu certo? Os dados não estão sendo considerados?
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
-
Deu certo.
O que tinha feito antes e depois vc tinha postado.
CharlesTI.
Ok.Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]