hola cacr.
veo dos cosas.
Para asignarle un alias a la sentencia CASE se recomienda encerrar esta entre parentesis.
(CASE
WHEN (recibo.reciboc03::integer % 2) = 0 THEN 'Segunda'::text
ELSE 'Primera'::text
END) AS quincena
Lo segundo que veo es la agrupación. Quincena y titulo son campos creados en memoria, pero igual harán parte de la consulta, por lo que te exigirá que también sean incluidos como campos.
Lo que se me ocurre es otro nivel de subconsulta.
Código SQL:
Ver originalSELECT reciboc03,reciboc04,reciboc28,quincena,titulo
FROM
(
SELECT recibo.reciboc03, recibo.reciboc04, recibo.reciboc28,
(CASE
WHEN (recibo.reciboc03::INTEGER % 2) = 0 THEN 'Segunda'::text
ELSE 'Primera'::text
END) AS quincena,
(CASE reciboc04
WHEN 'EM' THEN quincena ||' Quincena - '|| mes ||' - '|| agno ||')'
WHEN 'OB' THEN 'Semana '||reciboc03||')'
ELSE reciboc28
END) AS titulo
FROM recibo
) AS t
GROUP BY reciboc03,reciboc04,reciboc28,quincena,titulo;