web-dev-qa-db-fra.com

Comment résumer et soustraire en utilisant SQL?

J'utilise MySQL et j'ai deux tables:

master_table

  • ORDERNO 
  • ARTICLE
  • Quantité

stock_bal 

  • ARTICLE 
  • BAL_QTY

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).

21
Tharindu ucsc

Je pense que c'est ce que vous recherchez. NEW_BAL est la somme de QTYs 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
32
Devin Burke

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
1
Paulpro

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
0
Tory Netherton

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
0
Binaya Shrestha