我有一张像这样的表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是新栏目,它有所有空值。更新它应该给上面的结果。
答案 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)
答案 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