Contar periodos da manhã e da tarde em um range de datas - sql

SQL Server

SQL

02/05/2019

Tenho um range de datas com diversos lançamentos no período da tarde e da manhã, por exemplo, do dia 10/04/2019 até 20/04/2019 registros entre 8 e 11hs59mins são manhã, registros de 12hs e 17:59 são tarde.

Nesse período, portanto, tenho registros no banco MSSQL referente a atendimentos, diversos.

Caso eu tenha qualquer atendimento na manhã, preciso contabilizar em minha consulta 1 (um) período.
Caso eu tenha qualquer atendimento na parte da tarde, preciso contabilizar em minha consulta 1(um) período.

Dessa forma, em caso de eu ter pelo menos um atendimento pela manhã e um atendimento a tarde, preciso contabilizar em minha consulta SQL 2 (dois) períodos.

Se eu tiver dez atendimentos na manhã e dez a tarde, eu contabilizo 2 (dois) períodos da mesma forma.

Como posso criar essa consulta SQL?

Estou com dificuldade em agrupar e contar os períodos, validando se há registros ou não naquele período.
Ricardo

Ricardo

Curtidas 0

Respostas

João Santos

João Santos

02/05/2019

Olá Ricardo,
existe creio eu duas formas dese fazer essa contagem
SELECT COUNT(IF(hora => 8 AND hora  <= 11:59  )) AS MANHA,COUNT(IF(hora => 12 AND hora  <= 17:59  )) AS TARDE, FROM tabela;

Também pode ser usar o case
SELECT COUNT(case when hora => 8 AND hora  <= 11:59 then i++ ) AS MANHA, COUNT(case when hora => 12 AND hora  <= 17:59 then i++ ) AS TARDE, FROM tabela;


Espero ter ajudado
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

02/05/2019

Pelo que eu entendi esta avaliação é diária, certo?

- ser for avaliação diária:
SELECT
	CAST(T.data AS DATE) DIA,
	MAX(CASE WHEN CAST(T.data AS TIME) < '12:00' THEN 'SIM' ELSE 'NAO' END) MANHA,
	MAX(CASE WHEN CAST(T.data AS TIME) >= '12:00' THEN 'SIM' ELSE 'NAO' END) TARDE,
	MAX(CASE WHEN CAST(T.data AS TIME) < '12:00' THEN 1 ELSE 0 END)+
	MAX(CASE WHEN CAST(T.data AS TIME) >= '12:00' THEN 1 ELSE 0 END) PERIODOS
FROM
	Tabela T
GROUP BY
	CAST(T.data AS DATE)


- se for avaliacao geral:
SELECT
	MAX(CASE WHEN CAST(T.data AS TIME) < '12:00' THEN 'SIM' ELSE 'NAO' END) MANHA,
	MAX(CASE WHEN CAST(T.data AS TIME) >= '12:00' THEN 'SIM' ELSE 'NAO' END) TARDE,
	MAX(CASE WHEN CAST(T.data AS TIME) < '12:00' THEN 1 ELSE 0 END)+
	MAX(CASE WHEN CAST(T.data AS TIME) >= '12:00' THEN 1 ELSE 0 END) PERIODOS
FROM
	Tabela T

GOSTEI 0
POSTAR