sql - 两张表的列相加出错 : SQL Server 2005

标签 sql sql-server-2005 tsql

我被这个问题困了好一阵子了。我有两个表 ItemMasterItemStock,在 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/

相关文章:

sql - 重用 SQL Server 公用表表达式的结果

SQL 查询从 100 列中选择一个单词

sql - 有没有办法让 SQL NOT IN 查询更快?

sql - 如何返回重复值的空单元格并仅保留不同的单元格?

sql - SSRS - 动态隐藏列时保持表格相同的宽度?

sql-server - 使用 RAISERROR 在 SQL Server 2005 中不起作用?

mysql - 有和在哪里

tsql - 如何获取第一列不为空

sql-server - 用于带有和或条件的表的案例陈述?

sql-server-2008 - 使用顺序整数更新表