Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matias Rezende

[Resolvido] Montar SELECT

Recommended Posts

Galera, boa tarde

 

Estou precisando de uma ajuda para montar um SELECT. Aliás, nem sei se vai dar pra fazer tudo direto no MySql.

 

Seguinte, estou montando um fluxo de caixa em MySql e PHP e queria fazer uma consulta que retornasse a soma de todos valores que tivessem um campo com valor igual (no caso vencimento_contas_receber).

 

Estrutura da tabela

CREATE TABLE IF NOT EXISTS `contas_receber` (
  `id_contas_receber` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `id_cliente` int(10) unsigned NOT NULL,
  `valor_contas_receber` float NOT NULL,
  `vencimento_contas_receber` date NOT NULL,
  PRIMARY KEY (`id_contas_receber`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Espero que vocês entendam.

 

Obrigado pela ajuda

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

select sum(valor_contas_receber) total_a_receber, vencimento_contas_receber from contas_receber group by vencimento_contas_receber

 

isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Era isso que eu tinha pedido, mas acabei de ver que não era isso que eu precisava.

 

Tenho também a tabela contas_pagar, que tem a mesma estrutura (só mudando os nomes).

 

Queria exibir assim

 

DATA | TOTAL_RECEBER | TOTAL_PAGAR (retornando só quando existir pelo menos 1 dos dois)

 

Tem como fazer isso?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que expliquei mal no post anterior.

 

Fazendo esta consulta

SELECT SUM(valor_contas_pagar) AS total_pagar, vencimento_contas_pagar FROM contas_pagar GROUP BY vencimento_contas_pagar;
Tenho este resultado

total_pagar|vencimento_contas_pagar

2000 | '2009-01-01'

2000 | '2009-01-05'

Fazendo esta outra consulta

SELECT SUM(valor_contas_receber) AS total_receber, vencimento_contas_receber FROM agapes.contas_receber GROUP BY vencimento_contas_receber;
Tenho este resultado

total_receber | vencimento_contas_receber

3000 | '2009-01-01'

3000 | '2009-02-01'

3000 | '2009-03-01'

3000 | '2009-04-01'

3000 | '2009-05-01'

O que eu queria era um resultado assim

 

total_pagar | total_receber | vencimento

2000 | 3000 | '2009-01-01'

2000 | NULL | '2009-01-05'

NULL | 3000 | '2009-02-01'

NULL | 3000 | '2009-03-01'

NULL | 3000 | '2009-04-01'

NULL | 3000 | '2009-05-01'

Acho que agora ficou mais claro

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao vou escrever o sql pq senao eu vou escrever mto...

 

primeiro você empilha o dia com union das duas tabelas e da left join no dia da subquery de empilhar nas duas tabelas tambem e pronto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, obrigado pela resposta e pela disposição em ajudar, mas realmente não entendi muita coisa do que você falou, principalmente por ser bem iniciante em MySQL.

 

Quando você diz empilhar, você quer dizer GROUP BY? UNION?

Não sei se eu sou muito devagar ou se realmente é difícil...

 

Se puder ajudar, agradeço

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem uma tabela de contas a pagar ?

 

Uma solução ?

 

cria uma view com o total

 

create or replace view v_totalizar as

select data,valorpagar,0 valorreceber

from contasapagar

union

select data,0 valorpagar,valorreceber

from contasareceber

 

totaliza pela view

 

select data,sum(valorpagar) pagar,sum(valorreceber) receber

from v_totalizar

group by data

 

As queries estão logicamente simplificadas pois não tem WHERE etc , mas creio ter dado a ideia geral.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou!!!!! Galera, obrigado pela ajuda... Foi demais... Só tive que fazer uma pequena modificação. Tive que usar UNION ALL.

 

Para futuras referências, caso alguém precise desta mesma situação, ficou assim

 

CREATE OR REPLACE VIEW v_totalizar AS SELECT vencimento_contas_pagar AS vencimento,valor_contas_pagar,0 valor_contas_receber FROM contas_pagar UNION ALL SELECT vencimento_contas_receber AS vencimento,0 valor_contas_pagar,valor_contas_receber FROM contas_receber

Depois para pegar os valores, uso assim.

 

SELECT SUM(valor_contas_pagar) as total_pagar, SUM(valor_contas_receber) AS total_receber, vencimento FROM v_totalizar v GROUP BY vencimento;

 

Galera, quero agradecer de novo pela ajuda. Acho muito legal pessoas como vocês, que tem um bom conhecimento e resolvem compartilhar e ajudar os iniciantes como eu.

 

Carlos Eduardo

 

RESOLVIDO

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.