我被这个问题困了好一阵子了。我有两个表 ItemMaster
和 ItemStock
,在 ItemStock
表中我有一列 ItemId
,它是ItemMaster
表的 Id
列,每当我在 ItemStock
表中添加新数量时,我希望该数量值自动与已经退出的数量相加ItemMaster
基于ItemStock
表的ItemId
。
元素大师:
Id ItemName Quantity
---------- ----------- -----------
1 Item1 50
2 Item2 50
元素库存:
Id ItemId Quantity
---------- ----------- -----------
1 1 20
2 2 30
SQL Server 2005 中的查询:
with Developer([sum], itemid, stockid)
as
(
select
sum(stock.quantity + isNull(im.quantity, 0)) as [sum],
im.id as Itemid, stock.itemid as stockid
from ItemMaster im
inner join ItemStock stock on stock.itemid = im.id
group by im.id, stock.itemid
)
update ItemMaster
set quantity = (Select [sum] from Developer)
导致错误:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
谁能告诉我如何解决这个问题?
最佳答案
您是否在 UPDATE 语句中遗漏了 WHERE
子句??
现在,如果您执行 SELECT * FROM Developer
,您将获得:
sum itemid stockid
70 1 1
80 2 2
这正是错误所说的 - 查询返回多个结果,那么 UPDATE 应该对此做什么?它不能将 quantity
列设置为多个值......
只是猜测 - 你可能是想这样做吗?
;WITH Developer.......
(
......
)
UPDATE dbo.ItemMaster
SET quantity = dev.sum
FROM Developer dev
WHERE dbo.ItemMaster.ItemId = dev.ItemId
添加 WHERE
子句将 Developer
中的一行与 ItemMaster
中的一行相关联
关于sql - 两张表的列相加出错 : SQL Server 2005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7357900/