Как суммировать и вычитать значения, используя обновление с помощью группового запроса? - PullRequest
0 голосов
/ 28 ноября 2018

MyTable:

item_name   Qty     item_area
Belts        2        India
Shoes        20       US
T-Shirt      10       India
T-Shirt      12       US
T-Shirt      25       US

Я получаю это по выбранной группе по запросу

SELECT item_name, Sum(item_qty) as Qty, item_area
FROM dbo.item_stocks
group by item_area, item_name

, и мой вывод ниже:

item_name   Qty     item_area
    Belts        2        India
    Shoes        20       US
    T-Shirt      10       India
    T-Shirt      37       US

Теперь мне нужновычесть и обновить. Как я могу это сделать?Например,я хочу вычесть 5 футболок, они будут обновляться в MyTable?

футболки = 37-5 = 32

как я могу обновить в MyTable?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

просто добавьте столбец, который обозначает In / Out, скажем INOUT

, не обновляйте строку, просто добавьте новую строку для продажи акций.

Здесь,

INOUT = 1 обозначает IN, а 2 обозначает OUT

структура таблицы похожа на

item_name   Qty     item_area    INOUT
Belts        2        India        1
Shoes        20       US           1
T-Shirt      10       India        1
T-Shirt      12       US           1
T-Shirt      25       US           1
T-Shirt       5       US           2

теперь ваш запрос выглядит так

SELECT item_name, 
  Sum(case when INOUT = 1 then item_qty else (0-item_qty) end) as Qty, 
  item_area
FROM dbo.item_stocks
group by item_area, item_name
0 голосов
/ 28 ноября 2018

Вы можете использовать оконную функцию ROW_NUMBER, чтобы выбрать любую строку для вычитания.

;WITH CTE AS (
   SELECT *,ROW_NUMBER() over(PARTITION BY item_name,item_area order by Qty desc)rn 
   FROM item_stocks
)

update CTE
set Qty = Qty - 5
where rn = 1 and  item_name = 'T-Shirt' and item_area = 'US'

SELECT item_name, Sum(Qty) as Qty, item_area
FROM item_stocks
group by item_area, item_name
...