webentwicklung-frage-antwort-db.com.de

Wie SUM und SUBTRACT mit SQL?

Ich verwende MySQL und habe zwei Tabellen:

master_table

  • BEST.-NR 
  • ARTIKEL
  • MENGE

stock_bal 

  • ARTIKEL 
  • BAL_QTY

Master-Tabelle hat doppelte ORDERNO- und ITEM-Werte. Ich habe insgesamt QTY mit der SQL-Klausel GROUP BY erhalten.

Ich muss BAL_QTY von SUM von ITEM (master_table) abziehen/subtrahieren. Ich habe einen SUM QTY-Wert mit Abfrage (tatsächlich gibt es viele Zeilen).

21
Tharindu ucsc

Ich denke, das ist, wonach du suchst. NEW_BAL ist die Summe der QTYs, die vom Kontostand abgezogen werden:

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

Wenn Sie den Artikel-Saldo mit dem neuen Saldo aktualisieren möchten, verwenden Sie Folgendes:

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

Es wird davon ausgegangen, dass Sie die Subtraktion rückwärts geschrieben haben. Es zieht die Mengen in der Bestellung von der Waage ab, was am sinnvollsten ist, ohne mehr über Ihre Tabellen zu erfahren. Tausche nur die beiden, um es zu ändern, wenn ich mich geirrt habe:

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

Ich bin mir nicht ganz sicher, was Sie wollen, aber ich denke, es sieht so aus:

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

Warten Sie, Sie müssen den Restbestand der bestellten Artikel von der Gesamtzahl der bestellten Artikel abziehen? Ich muss dir sagen, dass das ein bisschen rückwärts klingt. Im Allgemeinen denke ich, dass die Leute es umgekehrt machen. Ziehen Sie die Gesamtzahl der bestellten Artikel vom Kontostand ab.

Wenn Sie das wirklich tun müssen ... Angenommen, ITEM ist einzigartig in 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

Ich habe diese Art von Technik ausprobiert. Multiplizieren Sie die Subtraktion von Daten mit (-1) und addieren Sie dann () die Summe der beiden Beträge. Anschließend wird die Summe abgezogen.

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