Ошибка при выборе с использованием coalesce на postgresql - PullRequest
1 голос
/ 14 января 2020

У меня есть этот запрос

select  bpl.id_employee as employeeId, 
    round(
        (
            sum(bppgt.nu_hours) + (sum(bppgt.nu_minutes::decimal)/60)
        ) - 
        coalesce(select sum(nu_horas), 0) 
            from boemulsa_sindical_hours 
            where fe_fecha_inicio >= '2019/12/01' 
            and fe_fecha_inicio <= '2019/12/31', 2) as hours,
    bri.nu_cod_incidence as incidenceCode, 
    min(bppgt.fe_date) as date
    from productions_people_general_tasks bppgt
    left join people bpl on bpl.id_employee = bppgt.id_employee
    left join general_tasks bgt on bgt.id_task = bppgt.id_task
    left join rrhh_incidences bri on bri.id_incidence = bgt.id_incidence
    where bppgt.fe_date >= '2019/12/01'         
    group by  bpl.id_employee
    order by bpl.id_employee

И у меня есть эта ошибка, есть идеи, что я делаю не так?

ERROR:  error de sintaxis en o cerca de «select»
LINE 6:    coalesce(select sum(nu_horas), 0) 

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 14 января 2020

Подзапрос требует свой собственный набор скобок. Однако агрегационный запрос без group by всегда возвращает ровно одну строку. Таким образом, вы можете переместить coalesce() внутри подзапроса:

   (select coalesce(sum(nu_horas), 0) 
    from boemulsa_sindical_hours 
    where fe_fecha_inicio >= '2019/12/01'  and
          fe_fecha_inicio <= '2019/12/31'
   ) 
0 голосов
/ 14 января 2020

Внутри coalesce (и любой другой функции) вы можете напрямую использовать столбец / значение:

select coalesce(1,2);

или, если вы хотите использовать другой запрос, он должен быть заключен в скобки:

select coalesce((select 1),2);

В вашем случае, так как вы не указываете from, вполне вероятно, что вы хотите coalesce(sum(nu_horas), 0)

...