Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:根据值的选择使用同一表中的值更新列_Sql_Sql Server_Sql Server 2012_Sql Update - Fatal编程技术网

SQL Server:根据值的选择使用同一表中的值更新列

SQL Server:根据值的选择使用同一表中的值更新列,sql,sql-server,sql-server-2012,sql-update,Sql,Sql Server,Sql Server 2012,Sql Update,我有一个包含库存物品的表格,同一物品可以存放在多个地方,即总数量=3,1个存放在橱柜中,2个存放在冰箱中,0个存放在餐具室中。每一个都有一个20的条目类型 还有条目类型为10的行控制总计。因此,在我的程序中,我看到可用的条目类型10,并且可以通过查看条目类型20来查看每个位置的数量 在运行了一些更新之后,我注意到,即使某个项目集的20行中有项目,我的10个类型也会变为零,我在in语句中有一个项目列表,可以只更改这些行 我想用一些CASE语句来更新这个表,我想强制10个条目等于20个条目的总和 表

我有一个包含库存物品的表格,同一物品可以存放在多个地方,即总数量=3,1个存放在橱柜中,2个存放在冰箱中,0个存放在餐具室中。每一个都有一个20的条目类型

还有条目类型为10的行控制总计。因此,在我的程序中,我看到可用的条目类型10,并且可以通过查看条目类型20来查看每个位置的数量

在运行了一些更新之后,我注意到,即使某个项目集的20行中有项目,我的10个类型也会变为零,我在in语句中有一个项目列表,可以只更改这些行

我想用一些CASE语句来更新这个表,我想强制10个条目等于20个条目的总和

表如下所示:

ITEM_ID    ENTRYTYPE    QTY       LOCATION_ID
------------------------------------------------
  A01        10          0       ALL-AVAILABLE   <--THIS ROW SHOULD SHOW QTY=3
  A01        20          1          CABINET
  A01        20          2          FRIDGE
  A01        20          0          PANTRY
  A02        10          0       ALL-AVAILABLE   <--THIS ROW SHOULD SHOW QTY=6
  A02        20          2          CABINET
  A02        20          2          FRIDGE
  A02        20          2          PANTRY  
当然,无论出于什么原因,我都无法让这一切顺利进行。感谢大家的帮助


TIA

您可以使用相关更新

UPDATE t2
SET qty = (select SUM(qty) from Inventory where item_id=t2.item_id and ENTRYTYPE = 20)
FROM Inventory t2
where ENTRYTYPE=10 AND qty=0

要限制更新的项目id,请使用where条件。

您可以使用相关更新

UPDATE t2
SET qty = (select SUM(qty) from Inventory where item_id=t2.item_id and ENTRYTYPE = 20)
FROM Inventory t2
where ENTRYTYPE=10 AND qty=0
要限制要更新的项目id,请使用where条件。

假设ENTRYTYPE=10始终是要更新总量的记录:

UPDATE Inventory 
SET qty = (SELECT SUM(qty) FROM Inventory WHERE ENTRYTYPE = 20)
WHERE ENTRYTYPE = 10 AND qty = 0;
假设ENTRYTYPE=10始终是要更新总量的记录:

UPDATE Inventory 
SET qty = (SELECT SUM(qty) FROM Inventory WHERE ENTRYTYPE = 20)
WHERE ENTRYTYPE = 10 AND qty = 0;

我会使用可更新的CTE来实现这一点:

with toupdate as (
      select i.*, sum(qty) over (partition by item_id) as sumqty
      from inventory i
     )
update toupdate
    set qty = sumqty
    where entrytype = 20;

我会使用可更新的CTE来实现这一点:

with toupdate as (
      select i.*, sum(qty) over (partition by item_id) as sumqty
      from inventory i
     )
update toupdate
    set qty = sumqty
    where entrytype = 20;

它似乎不喜欢第一个从。用红色下划线稍微改变这一点,以去除空和,并在和之前放置一个合并确定。最终结果是:更新t2集合数量=选择合并数量,从库存中选择0,其中项目id=t2。从库存t2中选择项目id和入口类型=20,其中入口类型=10,数量=0。似乎不喜欢从中选择第一个。用红色下划线稍微改变这一点,以去除空和,并在和之前放置一个合并确定。最终结果是:更新t2 SET qty=select COALESCESUMqty,0来自库存,其中item_id=t2。item_id和ENTRYTYPE=20来自库存t2,其中ENTRYTYPE=10,qty=0向下且脏……我喜欢它@托盘,您需要尝试此解决方案和其他解决方案,以查看哪些方案最适合您的工作负载。这将更新条目类型为20的所有项目的数量总和,这是错误的。@vkp-我想用一些CASE语句来更新这个表,我想强制10个条目等于20个条目的总和。是的。这是针对一个特定的条目id。这个问题只显示一个条目id。@Nicarus。这就是我在你回答之前所做的。下流的……我喜欢它@托盘,您需要尝试此解决方案和其他解决方案,以查看哪些方案最适合您的工作负载。这将更新条目类型为20的所有项目的数量总和,这是错误的。@vkp-我想用某种CASE语句更新该表,我想强制10个条目等于20个条目的总和。是的..这是针对一个特定的条目id。这个问题只显示一个条目id。@Nicarus..这就是我在你回答之前所做的。