如何使用update with group by Sql查询求和和和减去值?

如何使用update with group by Sql查询求和和和减去值?,sql,sql-server,group-by,sql-update,Sql,Sql Server,Group By,Sql Update,我的表格: 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_st

我的表格:

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件T恤,它会在我的表格中更新吗

T恤=37-5=32


如何在MyTable中更新?

您可以尝试使用
行数
窗口函数选择要减去的任何一行

;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

您可以尝试使用
ROW\u NUMBER
window函数选择要减去的任何一行

;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

只需添加一个表示in/Out的列,比如INOUT

不更新行,只为股票销售添加新行

这里,

INOUT=1表示输入,2表示输出

表结构类

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

只需添加一个表示in/Out的列,比如INOUT

不更新行,只为股票销售添加新行

这里,

INOUT=1表示输入,2表示输出

表结构类

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

您能否提供您的预期输出,以显示您的mytable在更新后将如何处理?您-5将在什么基础上更新我们的两行???@fa06我不知道,但我需要在求和后进行处理32@nikhilsugandh这仅适用于样本,我可以提供您将更新的行的任何值,有
Qty=12
Qty=25
的那一个?您能否提供您的预期输出,以显示您的mytable在更新后将如何处理?在什么基础上,您-5将更新我们的两行???@fa06我不知道,但我需要在求和后处理32@nikhilsugandh这仅适用于样本,我可以提供您将更新的行的任何值,有
Qty=12
Qty=25
的那一个??