SQL SUBTRA?ÃO ENTRE COLUNAS
Prezados,
a Query abaixo funciona uma beleza, mas gostaria de colocar a diferença entre as colunas qtd_saida e qtd_entrada e não estou conseguindo. Não sei se é cansaço, estafa, velhice da idade que chegou... fato é que não estou conseguindo coisa básica.
Eis a Query:
O resultado vem corretamente, algo como:
Descricao_completa Qtd_saida Qtd_entrada
0721727 FONTE ATX 500W 204PINOS JITEKNILKO 0 3.000
1N CARTUCHO DE TINTA CZ104AB HP 662 TRI-COLOR 2,0 ML 3.000 0
Só queria colocar uma quarta coluna com a diferença e estou até agora quase 23:00 horas apanhando igual cavalo de carroça. é a velhice. Só pode.
Grato a todos.
a Query abaixo funciona uma beleza, mas gostaria de colocar a diferença entre as colunas qtd_saida e qtd_entrada e não estou conseguindo. Não sei se é cansaço, estafa, velhice da idade que chegou... fato é que não estou conseguindo coisa básica.
Eis a Query:
select
upper(Produtos.descricaocompleta) as descricao_completa,
(select coalesce(sum(Itens.qtd),0) as qtd_saida
from esvendascomprasitens as Itens
inner join esvendascompras as VendasCompras on (VendasCompras.identreg=Itens.identregmestre)
where (VendasCompras.flentradasaida=[ô]S[ô]) and (VendasCompras.dtemissao>=[ô]01/01/2014[ô] and VendasCompras.dtemissao<=[ô]31/12/2014[ô]) and
(Itens.identregproduto=Produtos.identreg) and (Itens.codemp=50)
),
(select coalesce(sum(Itens.qtd),0) as qtd_entrada
from esvendascomprasitens as Itens
inner join esvendascompras as VendasCompras on (VendasCompras.identreg=Itens.identregmestre)
where (VendasCompras.flentradasaida=[ô]E[ô]) and (VendasCompras.dtemissao>=[ô]01/01/2014[ô] and VendasCompras.dtemissao<=[ô]31/12/2014[ô]) and
(Itens.identregproduto=Produtos.identreg) and (Itens.codemp=50)
)
from
esprodserv as Produtos
order by
descricao_completa
O resultado vem corretamente, algo como:
Descricao_completa Qtd_saida Qtd_entrada
0721727 FONTE ATX 500W 204PINOS JITEKNILKO 0 3.000
1N CARTUCHO DE TINTA CZ104AB HP 662 TRI-COLOR 2,0 ML 3.000 0
Só queria colocar uma quarta coluna com a diferença e estou até agora quase 23:00 horas apanhando igual cavalo de carroça. é a velhice. Só pode.
Grato a todos.
Não sei dizer qual o baco está usando, portanto estou me baseando em SQL Server.
Segue query
Fiz testes aqui e funcionou. Qualquer coisa posta ai!
Espero ter ajudado
Segue query
SELECT
PROD.IDENTREG,
UPPER(PROD.DESCRICAOCOMPLETA) AS DESCRICAO_COMPLETA,
COALESCE(SUM(
CASE
WHEN TAB.FLENTRADASAIDA = [ô]S[ô] THEN TAB.QUANTIDADE
ELSE 0
END
), 0) AS QTD_SAIDA,
COALESCE(SUM(
CASE
WHEN TAB.FLENTRADASAIDA = [ô]E[ô] THEN TAB.QUANTIDADE
ELSE 0
END
), 0) AS QTD_ENTRADA,
COALESCE(SUM(
CASE
WHEN TAB.FLENTRADASAIDA = [ô]E[ô] THEN TAB.QUANTIDADE
ELSE (TAB.QUANTIDADE * -1)
END
), 0) AS DIFERENCA
FROM ESPRODSERV PROD
INNER JOIN (
SELECT
VC.DTEMISSAO, I.CODEMP, I.IDENTREGPRODUTO, VC.FLENTRADASAIDA, COALESCE(SUM(I.QTD), 0) AS QUANTIDADE
FROM ESVENDASCOMPRASITENS I
INNER JOIN ESVENDASCOMPRAS VC ON (VC.IDENTREG = I.IDENTREGMESTRE)
GROUP BY VC.DTEMISSAO, I.CODEMP, I.IDENTREGPRODUTO, VC.FLENTRADASAIDA
) TAB ON (TAB.IDENTREGPRODUTO = PROD.IDENTREG)
WHERE TAB.CODEMP = 50
AND TAB.DTEMISSAO BETWEEN [ô]01/01/2014[ô] AND [ô]31/12/2014[ô]
GROUP BY PROD.IDENTREG, UPPER(PROD.DESCRICAOCOMPLETA);
Fiz testes aqui e funcionou. Qualquer coisa posta ai!
Espero ter ajudado
Amigo FILMAN,
Desculpe por ter esquecido de dizer que o BD é o PostGreSQL. Eu estava realmente muiiiiito cansado e não agia mais de forma lógica.
Sua Query funciona e encerrarei o tópico lhe pontuando novamente.
Contudo, resolvi de uma outra maneira. Bastou uma noite de bom sono para logo ao acordar resolver em 1 minuto a questão que levantei.
Fiz assim:
1) Partindo do princÃpio que todo select resulta uma tabela de linhas e colunas, dei um nome para o resultado (que é uma tabela, portanto pode ter um nome)
2) Selecionei novamente (com um select antes da query anterior, que passou a receber um nome para ser entendido como tabela) e assim coloquei os campos do resultado tabela, fazendo uma subtração simples entre os campos que desejava.
Ficou assim:
Tão simples, mas o cansaço, as noites anteriores programando sem dormir, somando à privação de sono a ansiosidade de ver logo a query finalizada, resultou em que eu não conseguia o que consegui rapidamente após dormir ao menos um pouco. Vida de programador.
Grato por tudo.
Desculpe por ter esquecido de dizer que o BD é o PostGreSQL. Eu estava realmente muiiiiito cansado e não agia mais de forma lógica.
Sua Query funciona e encerrarei o tópico lhe pontuando novamente.
Contudo, resolvi de uma outra maneira. Bastou uma noite de bom sono para logo ao acordar resolver em 1 minuto a questão que levantei.
Fiz assim:
1) Partindo do princÃpio que todo select resulta uma tabela de linhas e colunas, dei um nome para o resultado (que é uma tabela, portanto pode ter um nome)
2) Selecionei novamente (com um select antes da query anterior, que passou a receber um nome para ser entendido como tabela) e assim coloquei os campos do resultado tabela, fazendo uma subtração simples entre os campos que desejava.
Ficou assim:
select Query.descricao_completa as descricao_completa, Query.qtd_saida as total_saida, Query.qtd_entrada as total_entrada, (Query.qtd_saida - Query.qtd_entrada) as saldo
from
(select
upper(Produtos.descricaocompleta) as descricao_completa,
(select coalesce(sum(Itens.qtd),0) as qtd_saida
from esvendascomprasitens as Itens
inner join esvendascompras as VendasCompras on (VendasCompras.identreg=Itens.identregmestre)
where (VendasCompras.flentradasaida=[ô]S[ô]) and (VendasCompras.dtemissao>=[ô]01/01/2014[ô] and VendasCompras.dtemissao<=[ô]31/12/2014[ô]) and
(Itens.identregproduto=Produtos.identreg) and (Itens.codemp=50)
),
(select coalesce(sum(Itens.qtd),0) as qtd_entrada
from esvendascomprasitens as Itens
inner join esvendascompras as VendasCompras on (VendasCompras.identreg=Itens.identregmestre)
where (VendasCompras.flentradasaida=[ô]E[ô]) and (VendasCompras.dtemissao>=[ô]01/01/2014[ô] and VendasCompras.dtemissao<=[ô]31/12/2014[ô]) and
(Itens.identregproduto=Produtos.identreg) and (Itens.codemp=50)
)
from
esprodserv as Produtos
) as Query
order by Query.descricao_completa
Tão simples, mas o cansaço, as noites anteriores programando sem dormir, somando à privação de sono a ansiosidade de ver logo a query finalizada, resultou em que eu não conseguia o que consegui rapidamente após dormir ao menos um pouco. Vida de programador.
Grato por tudo.
Tópico encerrado , respostas não são mais permitidas