如何将值更新为SQL Server中update语句中的其余行

时间:2018-05-07 10:31:45

标签: sql sql-server

我有一张像这样的表Products

   product_id   product_rev  project owning_project
   ----------   ----------   ------  -------------
    1              aaa        p1          p1
    1              baa        null        p1
    1              caa        null        p1
    2              ddd        p2          p2
    2              eee        null        p2  
    2              kkk        null        p2  
    3              fff         p3         p3
    3              ggg         p3         p3
    3              hhh       null         p3
    3              iii       null         p3
    4              zzz       null         p4
    4              ttt        p4          p4
    4              rrr        null        p4          

对于一个product_id,可以有多个product_revid

我想按照表格中的上述内容更新owning_project列。

此处product_id+product_rev如果有项目值,那么它应该为owning_project列中具有空值的所有其余值更新相同的值。

来自评论部分,OP陈述

  

我想将项目列值更新到due_project列,如上所示。它应该为owning_project列中具有空值的所有其余值更新相同的项目值

  

HERW OWNING_PROJECT是新栏目,它有所有空值。更新它应该给上面的结果。

3 个答案:

答案 0 :(得分:1)

我认为你只想要coalesce()

update Products
set project  = coalesce(project, owning_project)
--where project is null;

你也可以简化为

update Products
set project  = owning_project
where project is null;

编辑:

update p
set owning_project = (select MAX(project) from Products where product_id = p.product_id)
from Products p;

答案 1 :(得分:1)

以下简单查询应该适合您。

Date date = cal.getTime();

<强> DEMO

答案 2 :(得分:0)

您可以尝试如下查询。

要注意: OP在评论中表达了

  

我想将项目列值更新到due_project列,如上所示。它应该为owning_project列中具有空值的所有其余值更新相同的项目值

答案不符合此评论。 来自另一条评论

  

HERW OWNING_PROJECT是新栏目,它具有所有空值。更新它应该给出上述结果。   这个答案是根据原始问题和本评论。

update t1
set t1.owning_project= t.project
from
tbl t1 join 
(
select 
max(project) as project,
product_id    
from
tbl group by product_id
) t
on t1.product_id    =t.product_id