it-roy-ru.com

Как суммировать и вычитать, используя SQL?

Я использую MySQL, и у меня есть две таблицы:

master_table

  • № ЗАКАЗА 
  • ВЕЩЬ
  • КОЛ

stock_bal 

  • ВЕЩЬ 
  • BAL_QTY

Основная таблица имеет повторяющиеся значения ORDERNO и ITEM. Я получил итоговую QTY, используя SQL 'GROUP BY' предложение.

Мне нужно вычесть/вычесть BAL_QTY из суммы ITEM (master_table). Я получил значение SUM QTY с помощью запроса (на самом деле есть много строк).

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

Это предполагает, что вы разместили вычитание в обратном направлении; он вычитает количества в заказе из баланса, что имеет смысл, не зная больше о ваших таблицах. Просто поменяйте местами эти два, если я ошибаюсь:

(SUM(master_table.QTY) - stock_bal.BAL_QTY) AS NEW_BAL
32
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
1
Paulpro

ах домашнее задание ...

Итак, подождите, вам нужно вычесть остаток товаров на складе из общего количества тех товаров, которые были заказаны? Я должен сказать вам, что это звучит немного задом наперед. Обычно я думаю, что люди делают это наоборот. Вычтите общее количество предметов, заказанных с баланса.

Если вам действительно нужно это сделать, хотя .... Если предположить, что ПУНКТ уникален в 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

Я попробовал эту технику. Умножьте вычитание из данных на (-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
0
Binaya Shrestha