Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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 Update语句包含来自另一个表的子查询_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql server Update语句包含来自另一个表的子查询

Sql server Update语句包含来自另一个表的子查询,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我正在尝试更新表中的一列。目标是获取当前值并从其他表中减去该值。以下是我所看到的: update LS set LS.Quantity = (LS.Quantity - ( select top 1 LSM.Quantity from tblLocationStockMovement LSM join tblLocation L on L.ID=LSM.LocationID join tb

我正在尝试更新表中的一列。目标是获取当前值并从其他表中减去该值。以下是我所看到的:

update LS   
    set LS.Quantity = (LS.Quantity - 
    ( 
        select top 1 LSM.Quantity 
        from tblLocationStockMovement LSM
            join tblLocation L on L.ID=LSM.LocationID
            join tblStock S on S.ID=LSM.StockID
            join tblLocationStock LS on LS.StockID=LSM.StockID
        where 
            LSM.StockID=LS.StockID 
            and MoveTypeID=16
            and dateadd(DAY, DATEDIFF(day,0,DateCreated),0)='2016-08-30 00:00:00.00')
    )

from tblLocationStock LS    
    join tblLocation L on L.ID=LS.LocationID
    join tblStock S on S.ID=LS.StockID
    join tblLocationStockMovement LSM on LS.StockID=LSM.StockID
tbllocationstockmove
表中有我需要从
tblLocationStock
表中减去的值。它们都可以使用
StockID
连接到
tblStock
。我希望它能减去两个表中引用的同一只股票的价值。现在它只是对每一个项目做相同的编号

我可能不需要最后的
join
s,我只是用它来添加一个
where
来测试一个特定的项目,然后再对每个项目进行测试。你知道我哪里做错了吗

编辑:谢谢David修改了我的格式。我没有经常使用这个网站,所以我不太熟悉发布东西的正确方式

编辑2:

你们三个都有一个相似的想法,奇怪的是它有时会起作用

以下是我正在运行的内容:

update LS
     set LS.Quantity=(ISNULL(LS.Quantity,0)-ISNULL(LSM.Quantity,0))
         from tblLocationStock LS
             join tblLocation L on L.ID=LS.LocationID
             join tblStock S on S.ID=LS.StockID
             join tblLocationStockMovement LSM on LSM.StockID=S.ID
         where L.LongDescription='Cafe'
             and MoveTypeID=2
             and PLU = 715 
问题是结果改变了,我不知道为什么

select LSM.Quantity
from tblLocationStockMovement LSM
     join tblLocation L on L.ID=LSM.LocationID
     join tblStock S on S.ID=LSM.StockID
where L.LongDescription='Cafe'
    and PLU=715
    and MoveTypeID=2
结果总是120

 select LS.Quantity
    from tblLocationStock LS
        join tblLocation L on L.ID=LS.LocationID
        join tblStock S on S.ID=LS.StockID
    where L.LongDescription='Cafe'
        and PLU = 715
结果总是53。因此,您希望update语句的结果始终是-67。有时会,但有时我会得到5,-43或29。答案会有不同的原因吗?

试试这个:

update LS
set LS.Quantity=LS.Quantity-LSM.Quantity
from tblLocationStock LS
    join tblLocation L on L.ID=LS.LocationID
    join tblStock S on S.ID=LS.StockID
    join tblLocationStockMovement LSM on LS.StockID=LSM.StockID
where LSM.movetypeid=16
    and LSM.datecreated = '08/30/2016'
update LS   
    set LS.Quantity = ISNULL(LS.Quantity,0) - ISNULL(LSM.Quantity,0)
from tblLocationStock LS    
join tblLocation L on L.ID=LS.LocationID
join tblStock S on S.ID=LS.StockID
join tblLocationStockMovement LSM on LS.StockID=LSM.StockID
    and MoveTypeID=16
    and dateadd(DAY, DATEDIFF(day,0,DateCreated),0)='2016-08-30 00:00:00.00'
您也可以尝试以下方法:

UPDATE LS   
    SET LS.Quantity = (LS.Quantity-LSM.Quantity)
FROM tblLocationStockMovement LSM
JOIN tblLocation L ON L.ID=LSM.LocationID
JOIN tblStock S ON S.ID=LSM.StockID
JOIN tblLocationStock LS ON LS.StockID=LSM.StockID
WHERE LSM.StockID=LS.StockID 
    AND MoveTypeID=16
    AND dateadd(DAY, DATEDIFF(DAY,0,DateCreated),0)='2016-08-30 00:00:00.00')
试试这个:

update LS
set LS.Quantity=LS.Quantity-LSM.Quantity
from tblLocationStock LS
    join tblLocation L on L.ID=LS.LocationID
    join tblStock S on S.ID=LS.StockID
    join tblLocationStockMovement LSM on LS.StockID=LSM.StockID
where LSM.movetypeid=16
    and LSM.datecreated = '08/30/2016'
update LS   
    set LS.Quantity = ISNULL(LS.Quantity,0) - ISNULL(LSM.Quantity,0)
from tblLocationStock LS    
join tblLocation L on L.ID=LS.LocationID
join tblStock S on S.ID=LS.StockID
join tblLocationStockMovement LSM on LS.StockID=LSM.StockID
    and MoveTypeID=16
    and dateadd(DAY, DATEDIFF(day,0,DateCreated),0)='2016-08-30 00:00:00.00'