J'utilise MySQL et j'ai deux tables:
master_table
stock_bal
La table principale a les valeurs ORDERNO
et ITEM
en double. J'ai le total QTY
en utilisant la clause SQL 'GROUP BY'.
Je dois déduire/soustraire BAL_QTY
de la somme de ITEM
(master_table). J'ai une valeur SUM QTY
utilisant query (en fait, il y a beaucoup de lignes).
Je pense que c'est ce que vous recherchez. NEW_BAL
est la somme de QTY
s soustraite du solde:
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
Si vous souhaitez mettre à jour le solde du poste avec le nouveau solde, utilisez les éléments suivants:
UPDATE stock_bal
SET BAL_QTY = BAL_QTY - (SELECT SUM(QTY)
FROM master_table
GROUP BY master_table.ORDERNO,
master_table.ITEM)
Cela suppose que vous avez posté la soustraction à l'envers; il soustrait les quantités de la balance dans l’ordre, ce qui est logique sans en savoir plus sur vos tables. Il suffit d'échanger ces deux pour le changer si je me trompais:
(SUM(master_table.QTY) - stock_bal.BAL_QTY) AS NEW_BAL
Je ne sais pas exactement ce que vous voulez, mais je pense que cela va dans le sens de:
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
ah devoirs ...
Alors attendez, vous devez déduire le solde des articles en stock du nombre total de ces articles commandés? Je dois vous dire que cela semble un peu en arrière. En général, je pense que les gens font l'inverse. Déduisez le nombre total d'articles commandés à partir de la balance.
Si vous avez vraiment besoin de le faire, cependant ......... Supposons que ITEM est unique dans 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
J'ai essayé ce genre de technique. Multipliez la soustraction des données par (-1), puis somme () le montant des deux puis vous obtiendrez le montant soustrait.
-- 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