SELECT CAST( '23.03.2017' AS DATE) DATA, TURNO,REFEICAO,TIPO,GRUPO,CATRACA,CARDAPIO,QUANTIDADE
FROM (
SELECT X.TIPO,X.GRUPO,X.CATRACA,X.TURNO,X.REFEICAO,'' CARDAPIO, COUNT(COLABORADOR_CODIGO) QUANTIDADE
FROM (
SELECT 'CONSUMO' TIPO,
       IIF(R.GRUPO_CODIGO>0,'EXTRAS','COLABORADORES') GRUPO,
       COALESCE((SELECT DESCRICAO FROM TBREP WHERE CODIGO = R.TERMINAL),'PC') CATRACA,
       IIF(R.HORARIO BETWEEN 420 AND 1140,'ALMOÇO','JANTA') REFEICAO,
       IIF(R.HORARIO BETWEEN 420 AND 1140,1,2) TURNO,
       R.COLABORADOR_CODIGO, R.HORA, R.DATA

  FROM TBREFEITORIO R
 WHERE (R.DATA = '23.03.2017' AND R.HORARIO > 420  )
    OR (R.DATA = (CAST('23.03.2017' AS DATE)+1)  AND R.HORARIO < 420)
) X
GROUP BY X.TIPO,X.GRUPO,X.CATRACA,X.TURNO,X.REFEICAO)

UNION

SELECT CAST( '23.03.2017' AS DATE) DATA, TURNO,REFEICAO,TIPO,GRUPO,CATRACA,CARDAPIO,QUANTIDADE
FROM (
SELECT 'RESERVA' TIPO, '' GRUPO, '' CATRACA, TURNO, IIF(TURNO=1,'ALMOÇO','JANTA') REFEICAO, CARDAPIO, SUM(QUANTIDADE) QUANTIDADE
FROM (
SELECT CRACHA,
(SELECT FIRST 1 R.DESCRICAO FROM TBREFEICAO R WHERE R.CODIGO = IIF(FUNCAO=0,1,FUNCAO)) CARDAPIO,
TURNO, QUANTIDADE
FROM (
SELECT C.CODIGO COLABORADOR_ID, C.CRACHA, C.PESSOAL_NOME NOME, C.TURNO, C.REFEICAO QUANTIDADE,
COALESCE((SELECT PS.CODIGO FROM TBPONTO_SITUACAO PS, TBPONTO_CARTAO_MARCACAO PCM
  WHERE PCM.COLABORADOR_CODIGO = C.CODIGO AND PCM.SITUACAO_CODIGO = PS.CODIGO
    AND PCM.DATA = '23.03.2017' AND PS.AFASTAMENTO = '1'),0) SIT_AFASTADO,
COALESCE((SELECT MAX(R.FUNCAO) FROM TBREFEITORIO R
           WHERE R.COLABORADOR_CODIGO = C.CODIGO
             AND R.DATA = IIF(C.TURNO = '1', CAST( '23.03.2017' AS DATE), CAST( '23.03.2017' AS DATE)+1)),1) FUNCAO
  FROM TBCOLABORADOR C
 WHERE C.AFASTADO = '0' AND C.REFEICAO > 0
   AND ((C.SITUACAO = 1 AND C.DATA_ADMISSAO <= '23.03.2017' ) OR
        (C.SITUACAO = 2 AND C.DATA_DEMISSAO >  '23.03.2017' ))
) 

UNION

SELECT CRACHA,
(SELECT FIRST 1 R.DESCRICAO FROM TBREFEICAO R WHERE R.CODIGO = IIF(FUNCAO=0,1,FUNCAO)) REFEICAO,
TURNO, CREDITOS
FROM (
SELECT CODIGO CRACHA, CREDITOS, RT.DESCRICAO NOME,
IIF(RT.RESERVA='1',
COALESCE((SELECT MAX(R.FUNCAO) FROM TBREFEITORIO R
           WHERE R.COLABORADOR_CODIGO = RT.CODIGO
             AND R.DATA = IIF(RT.TURNO = '1', CAST( '23.03.2017' AS DATE), CAST( '23.03.2017' AS DATE)+1)),1),1) FUNCAO, TURNO
  FROM TBREFEICAO_TERCEIROS RT
 WHERE '23.03.2017' BETWEEN RT.DATA_INICIAL AND RT.DATA_FINAL
   AND CREDITOS > 0
   AND RT.CONTA_RESERVA = '1')
ORDER BY 1,2
) GROUP BY 1,2,3,4,5,6)

ORDER BY 2,4,5
 