Alphak Postado Janeiro 12, 2013 Denunciar Share Postado Janeiro 12, 2013 Olá, Gostaria saber o que está faltando nesta sentença sql, pois está trazendo dados duplicados, como ilistrado na imagem anexo.WITH v_entradas AS( SELECT DISTINCT COALESCE(round(SUM (ent_valor), 4), 0)AS soma FROM entradas WHERE EXTRACT(YEAR FROM ent_data)= EXTRACT(YEAR FROM now()) GROUP BY EXTRACT(MONTH FROM ent_data)),v_saidas AS( SELECT DISTINCT COALESCE(round(SUM (sai_valor), 4), 0)AS soma2 FROM saidas WHERE EXTRACT(YEAR FROM sai_data)= EXTRACT(YEAR FROM now()) GROUP BY EXTRACT(MONTH FROM sai_data))SELECT DISTINCT soma, soma2, soma - soma2 AS saldoFROM v_entradas,v_saidas where v_entradas.soma in (SELECT DISTINCT soma from v_entradas)and v_saidas.soma2 in (SELECT DISTINCT soma2 from v_saidas)Obrigado pela atenção. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kakao Postado Janeiro 12, 2013 Denunciar Share Postado Janeiro 12, 2013 (editado) Pelo que entendi o que você quer é isto:with v_entradas as ( select date_trunc('month', ent_data) mes, sum(coalesce(ent_valor, 0)) soma from entradas where extract(year from ent_data) = extract(year from now()) group by 1 ), v_saidas as ( select date_trunc('month', sai_data) mes, sum(coalesce(sai_valor, 0)) soma from saidas where extract(year from sai_data) = extract(year from now()) group by 1 ) select to_char(e.mes, 'YYYY-MM') mes, round(e.soma, 4) soma, round(s.soma, 4) soma, round(e.soma - s.soma, 4) saldo from v_entradas e inner join v_saidas s on e.mes = s.mes Editado Janeiro 12, 2013 por Kakao Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alphak Postado Janeiro 12, 2013 Autor Denunciar Share Postado Janeiro 12, 2013 Pelo que entendi o que você quer é isto:with v_entradas as ( select date_trunc('month', ent_data) mes, sum(coalesce(ent_valor, 0)) soma from entradas where extract(year from ent_data) = extract(year from now()) group by 1 ), v_saidas as ( select date_trunc('month', sai_data) mes, sum(coalesce(sai_valor, 0)) soma from saidas where extract(year from sai_data) = extract(year from now()) group by 1 ) select to_char(e.mes, 'YYYY-MM') mes, round(e.soma, 4) soma, round(s.soma, 4) soma, round(e.soma - s.soma, 4) saldo from v_entradas e inner join v_saidas s on e.mes = s.mesOlá, Muito obrigado pela ajuda na query,Estive testando e funcionou bem, gostaria esclarecer mais uma dúvida, quando uma das tabelas não contêm dados a query não retorna nada, teria alguma maneira de mandar o valor zero para soma?Obrigado pela atenção Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kakao Postado Janeiro 12, 2013 Denunciar Share Postado Janeiro 12, 2013 quando uma das tabelas não contêm dados a query não retorna nada, teria alguma maneira de mandar o valor zero para soma?Qual é a versão do postgresql? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alphak Postado Janeiro 13, 2013 Autor Denunciar Share Postado Janeiro 13, 2013 quando uma das tabelas não contêm dados a query não retorna nada, teria alguma maneira de mandar o valor zero para soma?Qual é a versão do postgresql?Versão Postgresql:PostgreSQL 9.2.2, compiled by Visual C++ build 1600, 64-bit Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kakao Postado Janeiro 13, 2013 Denunciar Share Postado Janeiro 13, 2013 (editado) Para mostrar os meses sem movimento fica assim:with v_entradas as ( select date_trunc('month', ent_data) mes, sum(ent_valor) soma from entradas where extract(year from ent_data) = extract(year from now()) group by 1 ), v_saidas as ( select date_trunc('month', sai_data) mes, sum(sai_valor) soma from saidas where extract(year from sai_data) = extract(year from now()) group by 1 ) select to_char(gs.mes, 'YYYY-MM') mes, round(coalesce(e.soma, 0), 4) entrada, round(coalesce(s.soma, 0), 4) saida, round(coalesce(e.soma, 0) - coalesce(s.soma, 0), 4) saldo from v_entradas e inner join v_saidas s on e.mes = s.mes right outer join generate_series ( date_trunc('year', now()), date_trunc('year', now()) + interval '1 year - 1 month', '1 month' ) gs(mes) Editado Janeiro 13, 2013 por Kakao Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alphak Postado Janeiro 13, 2013 Autor Denunciar Share Postado Janeiro 13, 2013 Ao Executar está query no Postgresql ocorre o seguinete erro:ERRO: erro de sintaxe no fim da entradaLINE 30: ) gs(mes) ^********** Error **********ERRO: erro de sintaxe no fim da entradaSQL state: 42601Character: 831Não consegui resolver este erro. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kakao Postado Janeiro 13, 2013 Denunciar Share Postado Janeiro 13, 2013 Tenta assim:) gs(mes) on gs.mes = e.mes Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Alphak
Olá,
Gostaria saber o que está faltando nesta sentença sql, pois está trazendo dados duplicados, como ilistrado na imagem anexo.
WITH v_entradas AS(
SELECT DISTINCT
COALESCE(round(SUM (ent_valor), 4), 0)AS soma
FROM
entradas
WHERE
EXTRACT(YEAR FROM ent_data)= EXTRACT(YEAR FROM now())
GROUP BY
EXTRACT(MONTH FROM ent_data)
),
v_saidas AS(
SELECT DISTINCT
COALESCE(round(SUM (sai_valor), 4), 0)AS soma2
FROM
saidas
WHERE
EXTRACT(YEAR FROM sai_data)= EXTRACT(YEAR FROM now())
GROUP BY
EXTRACT(MONTH FROM sai_data)
)SELECT DISTINCT
soma,
soma2,
soma - soma2 AS saldo
FROM
v_entradas,v_saidas
where v_entradas.soma in (SELECT DISTINCT soma from v_entradas)
and v_saidas.soma2 in (SELECT DISTINCT soma2 from v_saidas)
Obrigado pela atenção.
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.