SQL-Sum值,直到在另一列中达到特定值

堆栈溢出

我有以下2表:

Col1|Col2|Col3
Val1 T1  
Val2 T2

Col1|Col2|Col3|Col4
Val1 test  1    
Val1 test  2
Val1 T1    3
Val2 test  1
Val2 T2    2

我需要更新值Col3Table 1符合表2的COL3的总和,直到表的col2的2到达从col2的值表1.所以,表1应该是这样的:

Col1|Col2|Col3
Val1 T1    6
Val2 T2    3

因此,它总计1+2+3 = 6为T1和1+2 = 3T2。

基本上,两个表的Col1都是关键。我正在使用MSSQL2008服务器。我曾尝试用Cursor做到这一点,但到目前为止还没有运气。请注意,表2中的按列排序是日期列(Column4)。它由Desc排序。

戈登·利诺夫

这有点棘手。您可以使用相关的子查询获取截止点:

update t1
    set col3 = t2.sum_col3
from t1 join
     (select t2.col1, sum(t2.col3) as sum_col3
      from t2 
      where t2.t4 >= (select tt2.t4
                      from t2 tt2 join
                           t1 tt1
                           on tt2.col1 = tt1.col1 and
                              tt2.col2 = tt1.col2
                     )
      group by t2.col1
     ) t2
     on t2.col1 = t1.col1;

或者,您可以使用窗口函数(但不能使用累积和):

update t1
    set col3 = t2.sum_col3
from t1 join
     (select t2.col1,
             sum(t2.col3) as sum_col3
      from (select t2.col1,
                   min(case when tt2.col1 = tt1.col2 then tt2.col4 end) over (partition by tt2.col1) as col4_match
            from t2 tt2 join
                 t1 tt1
                 on tt2.col1 = tt1.col1                           
           ) t2
      where col4 >= col4_match
      group by t2.col1
     ) t2
     on t2.col1 = t1.col1 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

一列的 SQL AVG 值,其中另一列等于特定值

使用python中的SQL语句在SQL LITE中添加一列,直到达到特定数目

SQL Server:求和(或差)列的每个组值,直到满足另一列的条件

SQL根据另一列中的值从一列中选择值

SQL:如何根据SQL中另一列中的值范围对一列求和?

根据 SQL 中的另一列过滤值

基于一列的最大值和另一列的特定ID的SQL选择

sql计数/求和直到另一列中的特定日期的调用数

如何在基于另一列的一列中累积SQL中的值?

SQL筛选一列中的所有值,但不在另一列中

如何根据SQL中另一列的值过滤一列

SQL:一列中与另一列相关的值计数

一列的默认值可以是SQL中的另一列吗?

SQL - 计算一个列值在另一列值中的出现次数

SQL - 按另一列的特定值分组的特定列的总和

SQL选择与另一列中的多个值匹配的列的值?

SQL - 为给定列中的值获取另一列的值

Spark SQL:当另一列是 groupBy().agg() 中的最大值时获取列的值

SQL查询以获取另一列中每个唯一值的最大值

SQL Server:仅当同一表中的另一列是特定值时,才如何强制在一列中使用NOT NULL?

如何按SQL SELECT语句中的特定列计数记录并将该值放在该行的另一列中

SQL 获取一列的值,使得另一列中的某个值不存在

SQL如何基于另一列中的值在一行中多次选择列

SQL / Postgres:查找具有相同值的元组(对于另一列中的给定值)

根据来自另一列的不同值对sql值求和,并将结果放入数组中

如何插入基于另一列(SQL)中的值设置唯一ID的列?

使用 SQL 中另一列的所有唯一值創建新列

在标准SQL中,如何选择行,以便对于一列中的每个唯一值,另一列中的所有值都是指定值?

T-SQL 如何选择一列值的计数,而另一列的值相同