Jump to content
Felipe Guedes Coutinho

[Resolvido] SELECT de 3 Tabelas Sem Relacionamento com SUM com RANGE de DATA.

Recommended Posts

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

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:

image.png.c80b1d7335dfa859efa36b5f089ae3e4.png

 

Tabela Venda

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:

image.png.25b96353685f8a3d6c8b765540c117e1.png

 

Tabela Despesa

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:

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

Share this post


Link to post
Share on other sites

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


 

Share this post


Link to post
Share on other sites

@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 SPOILER

Share this post


Link to post
Share on other sites

@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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By danielambrosio
      Estou trabalhando numa programação PHP é conectado na tabela (cl_configs) para reconhece coluna name que reconhece esses 5 campos.
      e também que adiciona esses 5 valores é adicionado nessa outra tabela (cl_ads_block_ips) nesses 8 coluna (id, ip, clicks, last_click, dads_refresh_qtd, dads_refresh_data, dads_refresh_ldata, clicks_rotativo_dia).
      E a conexão que eu usa era de outro site e não estou tendo problema e configurar em outro site que reconhece essa banco de dados abaixo.
       
      <?php $host = "localhost"; $user = "ads"; $pass = "_CMpFF4Hpa!G_gTh"; $dbname = "ads"; $port = 3306; try {     $conn = new PDO('mysql:host=' . $host . ';port=' . $port . ';dbname=' . $dbname, $user, $pass);     //echo "Conexão com banco de dados realizado com sucesso!"; } catch (PDOException $err) {     echo "Erro: Conexão com banco de dados não foi realizada com sucesso. Erro gerado " . $err->getMessage(); } ?>  
      Conecta com sucesso só não está reconhecendo a tabela (cl_configs) e nem adicionando na tabela (cl_ads_block_ips).
       
       
      Agora não sei porque não esta reconhecendo (cl_configs) e nem adicionando (cl_ads_block_ips).
       
       


    • By Yuri080
      Bom dia, ultimamente eu venho tentado baixar o connector/J do MySQL para fazer um CRUD porém quando eu baixo o connector ele vem em formato de pasta, e sinceramente não sei mais o que fazer, eu baixei até pelo instalador do MySQL mas ele vem em formato de pasta  ele vem assim, e não sei o porque disso.
    • By ment0r
      Boa tarde a todos.

      Estou iniciando um estudo com o banco MySQL (trabalho co PostgreSQL e Firebird) para futuros trabalhos. Bom, me deparei com um problema chato: caracteres especiais.
      Um exemplo: T�tulo.
      Não consigo exibir no meu site tais caracteres. O banco tem Charset/Collation: utf8/utf8_bin como configuração.
      Já usei o utf_encode e utf_decode - não resolveu.

      Alguém sabe o que mais posso fazer?
      Desde já, muito obrigado.
    • By danielambrosio
      Tenho uma programação que funciona perfeito em um site quero adiciona ela em outro site mais não acho a require_once("../../../../core/web_req_init.php"); que reconhece no banco de dados sabe como eu consigo fazer uma conexão no banco de dados que reconhece isso Base de Dados: forum-teste,
       
      Tabela: cl_configs no campo dads_clicks_status, dads_clicks_qtd, dads_refresh_status, dads_refresh_qtd, dads_refresh_time e essa outra Tabela: cl_ads_block_ips no campo ip, clicks, last_click, dads_refresh_qtd, dads_refresh_data, dads_refresh_ldata, clicks_rotativo_dia...
      Tabela: cl_configs no campo dads_clicks_status, dads_clicks_qtd, dads_refresh_status, dads_refresh_qtd, dads_refresh_time e essa outra Tabela: cl_ads_block_ips no campo ip, clicks, last_click, dads_refresh_qtd, dads_refresh_data, dads_refresh_ldata, clicks_rotativo_dia... Como eu faço pra criar uma conexão MySQL que reconhece esse banco de dados nesse duas tabela e campo ?
    • By manolegal
      Bom dia
      Tenho uma variável que traz vários dados de ID_LANÇAMENTO
      var_dump($meus_ids); array 0 => string '829' (length=3) 1 => string '830' (length=3) 2 => string '828' (length=3) Preciso fazer uma soma das quantidades constantes nestes 3 lançamentos e trazer em variável, porém variável está trazendo cada quantidade em separado, ao invés da soma.
      foreach($meus_ids as $item){ $Sql_lim = "SELECT SUM(CASE WHEN quantidade >= 11 then 10 else quantidade end) as quantidades_limite FROM minha_tabela WHERE id_lancamento = $item"; $Resultado_lim = executa($Sql_lim); $total_registros_lim = @pg_num_rows($Resultado_lim); while ($linha_lim = @pg_fetch_assoc($Resultado_lim)){ $quantidade_limite_consulta = $linha_lim["quantidades_limite"]; } // Fecha "while" } // Fecha foreach Utilizo BD Postgresql.
      O total de linhas retornadas é 1, o que em tese está correto.
      O problema é que ao invés de trazer a soma das quantidades, a variável está trazendo cada quantidade individualizada por lançamento. Onde posso estar errando?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.