Ir para conteúdo

POWERED BY:

Arquivado

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

darlansandro

Subtrair um mesmo campo em uma consulta MYSQL

Recommended Posts

Olá galera, vim busca ajuda para um problema de subtração. Tenho uma tabela de contas pagas e recebidas, nela existe um campo chamado "ln_valor", o que diferencia o que foi recebido do pago é um outro no campo chamado "ln_tp", neste campo toda vez que o usuario escolhe no formulario '1' (identifica como recebido) e '2' (identifica como despesa). Neste momento estou construindo um fluxo de caixa e preciso que em uma unica consulta me traga o valor de tudo que foi recebido menos tudo que foi pago até determinada data. Até o momento não obtive êxito. Estou postando abaixo o código, se alguem tiver algum exemplo de como subtrair um campo na mesma tabela, diferenciado por um outro campo, tipo ln_valor; ln_tp = '1' (receita) e ln_valor; ln_valor; ln_tp = '2' (despesa). Agradeceria.

 

$a_rs_SaldoAnterior = "-1";

if (isset($_GET['a'])) {

$a_rs_SaldoAnterior = $_GET['a'];

}

mysql_select_db($database_banco, $banco);

$query_rs_SaldoAnterior = sprintf("SELECT ln_id, ln_ct_id, ln_desc, ln_tp, SUM(DISTINCT ln_valor), ln_f_id, ln_data, ln_e_id, f_desc FROM lancamentos, financeiro WHERE (ln_data < %s AND ln_tp = '1' AND ln_e_id = '{$row_rs_EM['e_id']}' AND ln_pag = '2' AND f_id = ln_f_id AND ln_rg ='1') - ( ln_data < %s AND ln_tp = '1' AND ln_e_id = '{$row_rs_EM['e_id']}' AND ln_pag = '3' AND f_id = ln_f_id AND ln_rg ='1') GROUP BY ln_f_id", GetSQLValueString($a_rs_SaldoAnterior, "text"),GetSQLValueString($a_rs_SaldoAnterior, "text"));

$rs_SaldoAnterior = mysql_query($query_rs_SaldoAnterior, $banco) or die(mysql_error());

$row_rs_SaldoAnterior = mysql_fetch_assoc($rs_SaldoAnterior);

$totalRows_rs_SaldoAnterior = mysql_num_rows($rs_SaldoAnterior);

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como sua consulta está exibindo seus dados?

 

Veja se esse exemplo pode te dar uma luz:

 

SELECT A.Est_Codigo, A.Pro_Codigo, A.Est_Data, A.Est_Tipo,

A.Est_Quantidade, A.Est_NF, A.Est_DataNF, A.Est_Valor, A.Est_IPI, A.Est_ICMS,

B.Pro_Referencia, B.Pro_Nome, C.CF_Nome,

 

CASE WHEN CAST((SELECT SUM(Est_Quantidade) FROM f_estoque

WHERE Pro_Codigo = A.Pro_Codigo AND Est_Tipo = "E" AND Est_Codigo = A.Est_Codigo) AS DECIMAL(10,3)) IS NULL THEN CAST(0 AS DECIMAL(10,3)) ELSE

CAST((SELECT SUM(Est_Quantidade) FROM f_estoque

WHERE Pro_Codigo = A.Pro_Codigo AND Est_Tipo = "E" AND Est_Codigo = A.Est_Codigo) AS DECIMAL(10,3)) END ENTRADA,

 

CASE WHEN CAST((SELECT SUM(Est_Quantidade) FROM f_estoque

WHERE Pro_Codigo = A.Pro_Codigo AND Est_Tipo = "S" AND Est_Codigo = A.Est_Codigo) AS DECIMAL(10,3)) IS NULL THEN CAST(0 AS DECIMAL(10,3)) ELSE

CAST((SELECT SUM(Est_Quantidade) FROM f_estoque

WHERE Pro_Codigo = A.Pro_Codigo AND Est_Tipo = "S" AND Est_Codigo = A.Est_Codigo) AS DECIMAL(10,3)) END SAIDA,

 

CASE WHEN CAST((SELECT SUM(Est_Quantidade) FROM f_estoque

WHERE Pro_Codigo = A.Pro_Codigo AND Est_Tipo = "E" AND Est_Codigo < A.Est_Codigo) AS DECIMAL(10,3)) IS NULL THEN CAST(0 AS DECIMAL(10,3)) ELSE

CAST((SELECT SUM(Est_Quantidade) FROM f_estoque

WHERE Pro_Codigo = A.Pro_Codigo AND Est_Tipo = "E" AND Est_Codigo < A.Est_Codigo) AS DECIMAL(10,3)) END E_ANTERIOR,

 

CASE WHEN CAST((SELECT SUM(Est_Quantidade) FROM f_estoque

WHERE Pro_Codigo = A.Pro_Codigo AND Est_Tipo = "S" AND Est_Codigo < A.Est_Codigo) AS DECIMAL(10,3)) IS NULL THEN CAST(0 AS DECIMAL(10,3)) ELSE

CAST((SELECT SUM(Est_Quantidade) FROM f_estoque

WHERE Pro_Codigo = A.Pro_Codigo AND Est_Tipo = "S" AND Est_Codigo < A.Est_Codigo) AS DECIMAL(10,3)) END S_ANTERIOR

FROM f_estoque A

INNER JOIN f_produtos B ON (A.Pro_Codigo = B.Pro_Codigo)

INNER JOIN b_clientefornecedor C ON (B.For_Codigo = C.CF_Codigo)

 

O campo Est_Tipo será E (Entrada) ou S (Saída).

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda Ilano, mas acredito que não é o que eu quero ainda. O resultado da consulta no caso que apontei é o valor somente que foi identificado com o códito '1' (receita). Na verdade o que preciso é subtrair os valores de um mesmo campo na mesma tabela. O que diferencia é um outro campo que classifiquei como "ln_tp", desta forma existiram para o mesmo campo "ln_valor" valores "ln_tp = 1" (Receita) e valores "ln_tp = '2'" (Despesa). Na prática o que estou precisando é subtrair os valores Receita - Despesa em uma única consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, na consulta anterior q te mandei posso criar uma subconsulta calculando a diferença entre entradas e saídas. Mas veja neste post esta outra consulta http://forum.imasters.com.br/index.php?/topic/406792-sum-case/, se você tb fizer uma subconsulta poderá calcular a diferença entre os campos. Claro, q haverão diferenças em como você vai realizar sua consulta, mas acredito q a idéia básica seria esta.

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.