1
resposta

Como exiber 0 caso não exista dados

Pessoall,

Minha duvida é que ao fazer esse select, como faria pra essa parte do filter caso não exista registro do tipo_movimentacao vim 0?

select *, suplementacao - reducao as Calculo from (
SELECT
  suplementacao, reducao
  FROM sch_compras.tb_classificacao_orcamentaria co
  join lateral (select    
          sum(tmr.valor) filter (where tmr.tipo_movimentacao = 'A')
       ,sum(tmr.valor) filter (where tmr.tipo_movimentacao = 'R')
    from sch_compras.tb_movimentacao_reserva tmr
    where tmr.classificacao_orcamentaria_origem_id = co.id
   ) v(suplementacao,reducao) on true
  INNER JOIN  sch_compras.tb_origem o ON o.id = co.origem_id
  INNER JOIN   sch_compras.tb_processo_empenho pe ON pe.classificacao_orcamentaria_id = co.id
  INNER JOIN  sch_compras.tb_processo_empenho_dueof ped ON ped.processo_empenho_id = pe.id
      WHERE co.ano::int = COALESCE(2021, co.ano::int) 
    and extract(month from pe.dt_empenho) = 1
    and o.codigo = '0701'
    and co.codigo = '2021.0701.03.091.4100.4141.03.100.90'
  GROUP BY
    co.id,
    suplementacao,
    reducao    
  ORDER BY 1,2) as teste
1 resposta

Oi Wilker, tudo certo?

Peço desculpas pela demora em retornar.

Como se trata de um projeto pessoal seu, onde não consigo saber exatamente o resultado obtido e o que deseja obter, tomarei como base o uso do comando FILTER para tentar sanar suas dúvidas.

Por padrão, caso não haja os dados do filtro (tmr.tipo_movimentacao = 'A' e tmr.tipo_movimentacao = 'R'), ele retornará nulo.

Para que não retorne o valor NULL quando não houver dados do tipo_movimentacao, você pode utilizar a função COALESCE, que avalia os argumentos até encontrar o primeiro argumento não nulo e pode retornar 0 (zero) quando o campo for nulo, como mostro abaixo:

  • Selecionando dados sem o COALESCE:

    Print do pgadmin executando o código `SELECT SUM (pessoas. idade) FILTER (WHERE pessoas. idade >= 27) AS "Soma das Idades" FROM pessoas;` onde o resultado obtido foi igual a NULL

  • Com o COALESCE:

    Print do pgadmin executando o código `SELECT COALESCE ((SELECT SUM (pessoas. idade) FILTER (WHERE pessoas. idade >= 27) FROM pessoas LIMIT 1), 0) AS "Soma de Idades;";` onde o resultado obtido foi igual a 0 (zero)

Espero ter ajudado e bons estudos!