Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 将不同表中的数据更新为空行,并使用日期汇总数量_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 将不同表中的数据更新为空行,并使用日期汇总数量

Sql 将不同表中的数据更新为空行,并使用日期汇总数量,sql,sql-server,tsql,Sql,Sql Server,Tsql,以下是将数据从其他连接的列更新到一个空行表中的查询,然后汇总每个列相对于日期的数量 Update Dis set Dis.OpStk = Sum(Case when ST.TrDate < FDate then ST.Qty end),--Quantity of stock before FDate Dis.ClsStk = Sum(case when ST.TrDate >TDate then ST.Qty end ),--Quantity of stock Af

以下是将数据从其他连接的列更新到一个空行表中的查询,然后汇总每个列相对于日期的数量

Update Dis 
    set Dis.OpStk = Sum(Case when ST.TrDate < FDate then ST.Qty end),--Quantity of stock before FDate
    Dis.ClsStk = Sum(case when ST.TrDate >TDate then ST.Qty end ),--Quantity of stock After TDate
    Dis.B14 = Sum(Case when Dis.FDate=DateADD(day,-14,FDate) then SL.Qty end),--Before 14 days
    Dis.A14 = Sum(Case when Dis.TDate=DATEADD(day,14,TDate) then SL.Qty end),--After 14 days
    Dis.A28 = Sum(Case when Dis.TDate=DATEADD(day,28,TDate) then SL.Qty end),--After 28 days
    Dis.A60 = Sum(Case when Dis.TDate=DATEADD(day,60,TDate) then SL.Qty end),--60
    Dis.A180 = Sum(Case when Dis.TDate=DATEADD(day,180,TDate) then SL.Qty end) --180
from #DisData Dis
Inner Join StockLine ST on Dis.ItemCode=ST.ItemCode 
Inner Join SaleLine SL on Dis.ItemCode=SL.ItemCode
从这些链接表中


我的问题是这个问题是正确的。如果没有,那么正确的形式是什么。

这太长了,无法发表评论

该查询不正确。这在任何数据库中都是不正确的,因为SET子句中有SUM。这在SQL Server中是不允许的。SQL通常不允许这样做

你的问题不清楚你打算完成什么。您可能会感到惊讶,但非工作查询通常不包含此类信息

我怀疑你想要这样的东西:

Update Dis 
    set OpStk = st.opstk,
        . . .
        B14 = sl.b14,
        . . .
from #DisData Dis cross apply
     (select Sum(Case when ST.TrDate < dis.FDate then ST.Qty end) as OpStk,
             . . . -- additional expressions here
      from StockLine ST 
      where Dis.ItemCode = ST.ItemCode 
     ) st cross apply
     (select Sum(Case when Dis.FDate = DateADD(day, -14, dis.FDate) then SL.Qty end) as b14,
             . . . -- additional expressions here
      from SaleLine SL 
      where Dis.ItemCode = SL.ItemCode
     ) sl;

我确实注意到,您的日期算术使用=,但注释使用像before和after这样的词。因此,这可能会成功地更新表,但可能不会达到您真正想要的效果。

将数据更新到一个空行表中如果表是空的,则无需更新如果您是初学者,您应该做的第一件事是创建一个测试环境来测试这类事情并亲自验证它!你当然不能把别人在互联网上告诉你的事情当作事实,如果你随后去破坏一个生产数据库,我认为你的老板不会接受这是一个正当的理由。设置开发环境,边测试边学习。此外,我们不知道您的要求是什么,以确定您的查询是否正确。此站点不是代码审查站点,它用于解决特定的技术问题。@DaleK让我先测试一下,然后谢谢当您提出问题时,您需要指定您试图完成的内容-通常使用DDL+DML等示例数据,您希望的结果为格式化文本和您的查询尝试。我投票关闭此问题,因为我的问题此查询正确吗?这不是这个社区能够回答的问题。