Como somar e subtrair usando SQL?
Estou a usar o MySQL e tenho duas mesas:
master_table
- ORDERNO
- ITEM
- QTY
stock_bal
- ITEM
- BAL_QTY
a tabela principal tem valores duplicados ORDERNO
e ITEM
. Eu tenho total QTY
Usando a cláusula SQL 'GROUP BY'.
preciso de deduzir / subtrair BAL_QTY
da soma de ITEM
(master_table). Eu tenho o valor SUM QTY
Usando a consulta (na verdade, existem muitas linhas).
19
Author: Devin Burke, 2011-07-16
4 answers
Acho que é disto que estás à procura.
NEW_BAL
é a soma de QTY
subtraída do saldo:
SELECT master_table.ORDERNO,
master_table.ITEM,
SUM(master_table.QTY),
stock_bal.BAL_QTY,
(stock_bal.BAL_QTY - SUM(master_table.QTY)) AS NEW_BAL
FROM master_table INNER JOIN
stock_bal ON master_bal.ITEM = stock_bal.ITEM
GROUP BY master_table.ORDERNO,
master_table.ITEM
Se quiser actualizar o saldo do item com o novo saldo, use o seguinte:
UPDATE stock_bal
SET BAL_QTY = BAL_QTY - (SELECT SUM(QTY)
FROM master_table
GROUP BY master_table.ORDERNO,
master_table.ITEM)
Isto assume que você postou a subtração para trás; subtrai as quantidades na ordem a partir do saldo, o que faz mais sentido sem saber mais sobre as suas tabelas. Troque esses dois para mudá-lo se eu estivesse errado.
(SUM(master_table.QTY) - stock_bal.BAL_QTY) AS NEW_BAL
29
Author: Devin Burke, 2011-07-16 03:54:07
Não sei exactamente o que queres, mas acho que é o seguinte:
SELECT `Item`, `qty`-`BAL_QTY` as `qty` FROM ((SELECT Item, SUM(`QTY`) as qty FROM `master_table` GROUP BY `ITEM`) as A NATURAL JOIN `stock_table`) as B
1
Author: Paulpro, 2011-07-16 03:31:54
Trabalho de casa...
Então, espere, você precisa deduzir o saldo de itens em estoque do número total desses itens que foram encomendados? Tenho de te dizer que isso soa um pouco ao contrário. Geralmente, acho que as pessoas o fazem ao contrário. Deduzir o número total de itens encomendados do saldo.
Se realmente precisares de fazer isso...
Assumindo que esse ITEM é único em stock_bal...
SELECT s.ITEM, SUM(m.QTY) - s.QTY AS result
FROM stock_bal s
INNER JOIN master_table m ON m.ITEM = s.ITEM
GROUP BY s.ITEM, s.QTY
0
Author: Tory Netherton, 2011-07-16 03:51:42
Já tentei este tipo de técnica. Multiplique o subtract dos dados por (-1) e então sum () a quantidade de ambos então você obterá a quantidade subtraída.
-- Loan Outstanding
select 'Loan Outstanding' as Particular, sum(Unit), sum(UptoLastYear), sum(ThisYear), sum(UptoThisYear)
from
(
select
sum(laod.dr) as Unit,
sum(if(lao.created_at <= '2014-01-01',laod.dr,0)) as UptoLastYear,
sum(if(lao.created_at between '2014-01-01' and '2015-07-14',laod.dr,0)) as ThisYear,
sum(if(lao.created_at <= '2015-07-14',laod.dr,0)) as UptoThisYear
from loan_account_opening as lao
inner join loan_account_opening_detail as laod on lao.id=laod.loan_account_opening_id
where lao.organization = 3
union
select
sum(lr.installment)*-1 as Unit,
sum(if(lr.created_at <= '2014-01-01',lr.installment,0))*-1 as UptoLastYear,
sum(if(lr.created_at between '2014-01-01' and '2015-07-14',lr.installment,0))*-1 as ThisYear,
sum(if(lr.created_at <= '2015-07-14',lr.installment,0))*-1 as UptoThisYear
from loan_recovery as lr
inner join loan_account_opening as lo on lr.loan_account_opening_id=lo.id
where lo.organization = 3
) as t3
0
Author: Binaya Shrestha, 2015-07-30 06:19:22