Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, venho contribuindo com diversas dúvidas, mas hoje quem está com uma dúvida sou eu. Cenário - Gerar Dados para Relatório de Faturamento. Objetivo - Obter os valores totais das tabelas de Compra, Venda e Despesa agrupados por mês através de SUM dentro do "periodo" passado pela tela de consulta do relatório.
***Problema*** - Não existe um relacionamento entre as tabelas e eu preciso obter os resultados por ***1 (UM) único select*** pois a cada registro lido com os valores totalizados e agrupados por mês eu movimento para um array onde o resultado do array é movimentado para um*** Chart do Google*** que gera um ***gráfico***. ***Insumos:*** Tabela compra /monthly_2019_08/image.png.3e1336108de7c472adcad5fef251b3e1.png" /> **RESULTADO SEPARADO DA TABELA COMPRA** SELECT sum(vlr_pago), CASE extract(MONTH from dt_registro_compra) WHEN 1 THEN 'Janeiro' WHEN 2 THEN 'Fevereiro' WHEN 3 THEN 'Março' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Maio' WHEN 6 THEN 'Junho' WHEN 7 THEN 'Julho' WHEN 8 THEN 'Agosto' WHEN 9 THEN 'Setembro' WHEN 10 THEN 'Outubro' WHEN 11 THEN 'Novembro' WHEN 12 THEN 'Dezembro' END AS mes FROM db_pescado_gelo.sqltb_compra WHERE dt_registro_compra between '2019-01-01' and '2019-12-31' group by mes order by dt_registro_compra asc RESULTADO: /monthly_2019_08/image.png.c80b1d7335dfa859efa36b5f089ae3e4.png" /> Tabela Venda /monthly_2019_08/image.png.9817a40bda85ebdb428f3f4d2ad8e5e0.png" /> **RESULTADO SEPARADO DA TABELA VENDA** SELECT sum(vlr_vale), CASE extract(MONTH from dt_registro_venda) WHEN 1 THEN 'Janeiro' WHEN 2 THEN 'Fevereiro' WHEN 3 THEN 'Março' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Maio' WHEN 6 THEN 'Junho' WHEN 7 THEN 'Julho' WHEN 8 THEN 'Agosto' WHEN 9 THEN 'Setembro' WHEN 10 THEN 'Outubro' WHEN 11 THEN 'Novembro' WHEN 12 THEN 'Dezembro' END AS mes FROM db_pescado_gelo.sqltb_venda WHERE dt_registro_venda between '2019-01-01' and '2019-12-31' group by mes order by dt_registro_venda asc RESULTADO: /monthly_2019_08/image.png.25b96353685f8a3d6c8b765540c117e1.png" /> Tabela Despesa /monthly_2019_08/image.png.14722c9001a901ffe9e5cb75014dbbc4.png" /> Sei que devo colocar *dt_pagamento is not null* **RESULTADO SEPARADO DA TABELA DESPESA** SELECT sum(vlr_pago), CASE extract(MONTH from dt_pagamento) WHEN 1 THEN 'Janeiro' WHEN 2 THEN 'Fevereiro' WHEN 3 THEN 'Março' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Maio' WHEN 6 THEN 'Junho' WHEN 7 THEN 'Julho' WHEN 8 THEN 'Agosto' WHEN 9 THEN 'Setembro' WHEN 10 THEN 'Outubro' WHEN 11 THEN 'Novembro' WHEN 12 THEN 'Dezembro' END AS mes FROM db_pescado_gelo.sqltb_despesa WHERE dt_pagamento between '2019-01-01' and '2019-12-31' AND dt_pagamento is not null group by mes order by dt_pagamento asc RESULTADO: /monthly_2019_08/image.png.e07ac8d362490946ac9859787e056705.png" /> O resultado que eu gostaria é algo parecido com isso: ***TABELA DE VENDA*** ***TABELA DE COMPRA*** ***TABELA DE DESPESA*** - - R$ 31.272,55 Julho - - Agosto R$ 3.796,53 R$ 20.687,20 Agosto R$ 3.796,53 Agosto Esse resultado eu "***preciso***" que seja através do retorno do um único ***SELECT,*** se alguém puder me ajudar, ficarei muito agradecido. Se puderem dar uma forã agradeço @Motta. @Omar~. @Maujor. @gabrielms Att. ***Felipe Coutinho***tente
select sum(compra) compra,
Sum(venda) venda,
Sum(despesa) despesa,
Mes
from(
SELECT sum(vlr_pago) compra,
0 venda,
0 despesa
CASE extract(MONTH from dt_registro_compra)
WHEN 1 THEN 'Janeiro'
WHEN 2 THEN 'Fevereiro'
WHEN 3 THEN 'Março'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Maio'
WHEN 6 THEN 'Junho'
WHEN 7 THEN 'Julho'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Setembro'
WHEN 10 THEN 'Outubro'
WHEN 11 THEN 'Novembro'
WHEN 12 THEN 'Dezembro'
END AS mes
FROM db_pescado_gelo.sqltb_compra
WHERE dt_registro_compra between '2019-01-01' and '2019-12-31'
group by mes
union
SELECT 0 compra,
sum(vlr_vale) venda,
0 despesa
CASE extract(MONTH from dt_registro_venda)
WHEN 1 THEN 'Janeiro'
WHEN 2 THEN 'Fevereiro'
WHEN 3 THEN 'Março'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Maio'
WHEN 6 THEN 'Junho'
WHEN 7 THEN 'Julho'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Setembro'
WHEN 10 THEN 'Outubro'
WHEN 11 THEN 'Novembro'
WHEN 12 THEN 'Dezembro'
END AS mes
FROM db_pes cado_gelo.sqltb_venda
WHERE dt_registro_venda between '2019-01-01' and '2019-12-31'
group by mes
union
RESULTADO SEPARADO DA TABELA DESPESA
SELECT 0 compra,
0 venda
sum(vlr_pago) despesa,
CASE extract(MONTH from dt_pagamento)
WHEN 1 THEN 'Janeiro'
WHEN 2 THEN 'Fevereiro'
WHEN 3 THEN 'Março'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Maio'
WHEN 6 THEN 'Junho'
WHEN 7 THEN 'Julho'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Setembro'
WHEN 10 THEN 'Outubro'
WHEN 11 THEN 'Novembro'
WHEN 12 THEN 'Dezembro'
END AS mes
FROM db_pescado_gelo.sqltb_despesa
WHERE dt_pagamento between '2019-01-01' and '2019-12-31'
AND dt_pagamento is not null
group by mes
) virtual
group by mes@Motta
Tentei o SELECT que você mandou, mas está apresentando dado de ALIAS
Error Code : 1248
Every derived table must have its own alias
Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000
Spoiler
select *
from(
SELECT sum(vlr_pago) compra,
0 venda,
0 despesa,
CASE extract(MONTH from dt_registro_compra)
WHEN 1 THEN 'Janeiro'
WHEN 2 THEN 'Fevereiro'
WHEN 3 THEN 'Março'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Maio'
WHEN 6 THEN 'Junho'
WHEN 7 THEN 'Julho'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Setembro'
WHEN 10 THEN 'Outubro'
WHEN 11 THEN 'Novembro'
WHEN 12 THEN 'Dezembro'
END AS mes
FROM db_pescado_gelo.sqltb_compra
WHERE dt_registro_compra between '2019-01-01' and '2019-12-31'
group by mes
union
SELECT 0 compra,
sum(vlr_vale) venda,
0 despesa,
CASE extract(MONTH from dt_registro_venda)
WHEN 1 THEN 'Janeiro'
WHEN 2 THEN 'Fevereiro'
WHEN 3 THEN 'Março'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Maio'
WHEN 6 THEN 'Junho'
WHEN 7 THEN 'Julho'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Setembro'
WHEN 10 THEN 'Outubro'
WHEN 11 THEN 'Novembro'
WHEN 12 THEN 'Dezembro'
END AS mes
FROM db_pescado_gelo.sqltb_venda
WHERE dt_registro_venda between '2019-01-01' and '2019-12-31'
group by mes
union
SELECT 0 compra,
0 venda,
sum(vlr_pago) despesa,
CASE extract(MONTH from dt_pagamento)
WHEN 1 THEN 'Janeiro'
WHEN 2 THEN 'Fevereiro'
WHEN 3 THEN 'Março'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Maio'
WHEN 6 THEN 'Junho'
WHEN 7 THEN 'Julho'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Setembro'
WHEN 10 THEN 'Outubro'
WHEN 11 THEN 'Novembro'
WHEN 12 THEN 'Dezembro'
END AS mes
FROM db_pescado_gelo.sqltb_despesa
WHERE dt_pagamento between '2019-01-01' and '2019-12-31'
AND dt_pagamento is not null
group by mes
)
O select usado está no SPOILEROriginal editado.
Não entendi?
Editei meu post com a possível solução.
@Motta
Não sei como lhe agradescer fera, muito bom mesmo, não sei como lhe agradescer, a sua query funcionou como eu preciso, apenas precisei colocar a ordenação pelo número do mês, pois pelo nome agosto vem antes de fevereiro e estava bagunçando o resultado, mas após colocar o order by pelo número do mês no lugar do nome obtive o resultado exato.
Muito obrigado mesmo pela sua ajuda.
Preciso de uma ajuda para colocar o tópico como resolvido, pois olhei aqui na página e não achei a opção.
Grato.
Att.
Felipe Coutinho
Galera, ainda não consegui resolver esse problema, será que nenhuma ajuda vira?
Desde já agradeço.