web-dev-qa-db-ja.com

SQLを使用してSUMおよびSUBTRACTする方法は?

私はMySQLを使用しており、2つのテーブルがあります。

master_table

  • 注文番号
  • 項目
  • 数量

stock_bal

  • 項目
  • BAL_QTY

マスターテーブルにORDERNOITEMの値が重複しています。 SQLの「GROUP BY」句を使用して合計QTYを取得しました。

ITEM(master_table)の合計からBAL_QTYを差し引く必要があります。クエリを使用してSUM QTY値を取得しました(実際には多くの行があります)。

22
Tharindu ucsc

これがあなたが探しているものだと思います。 NEW_BALは、バランスから差し引かれたQTYsの合計です。

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

アイテムの残高を新しい残高で更新する場合は、次を使用します。

UPDATE stock_bal
SET    BAL_QTY = BAL_QTY - (SELECT   SUM(QTY)
                            FROM     master_table
                            GROUP BY master_table.ORDERNO,
                                     master_table.ITEM)

これは、減算を後方にポストしたことを前提としています。残高から注文の数量を減算します。これは、テーブルについて詳しく知らなくても最も理にかなっています。私が間違っていた場合は、これら2つを交換して変更してください。

(SUM(master_table.QTY) - stock_bal.BAL_QTY) AS NEW_BAL
34
Devin Burke

私はあなたが何を望むのか正確にはわかりませんが、それは次のようなものだと思います:

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

私はこの種の手法を試しました。データからの減算に(-1)を乗算し、次に両方の量をsum()すると、減算された量が得られます。

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

宿題...

待ってください。注文したアイテムの総数から在庫のアイテムの残高を差し引く必要がありますか?少し後ろ向きに聞こえます。一般的に、人々はそれを逆に行うと思います。注文したアイテムの合計数を残高から差し引きます。

本当にそうする必要がある場合... ITEMが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