如何在Oracle中执行此更新

时间:2014-09-12 14:43:32

标签: sql oracle

我有以下几条记录(USER_1,USER_2,USER_3,USER_4,USER_5,USER_6是列)

USER_1  USER_2  USER_3  USER_4  USER_5   USER_6
ABC01  12-Sept    A     100    12345         
ABC02  12-Sept    A     200    12346   
ABC03  12-Sept    A     300    12347   
ABC09  12-Sept    A     250    12369    Record not present on side B
ABC01  12-Sept    B     100    12345   
ABC02  12-Sept    B     200    12346   
ABC03  12-Sept    B     300    12347       
ABC10  12-Sept    B     350    12222  Record not present on side A

解释

如果user_3为' A'我们根据USER_3区分记录。然后,如果Side A,user_3,则会将其视为'B',然后将其视为“B'”。现在,如果你看到{A}和B都存在ABC01, ABC02, ABC03,但是如果你看到ABC09它只出现在A面而不是B面。在这种情况下,我想要USER_6要使用字符串'Record not present on side B'进行更新。我不知道怎么写一个可以做到这一点的循环。如有任何帮助,将不胜感激。非常感谢

1 个答案:

答案 0 :(得分:2)

您可以使用相关子查询执行此操作:

update table t
    set user_6 = (select (case when min(user_3) <> max(user_3) then NULL
                               when min(user_3) = 'A' then 'Record not present on side B'
                               else 'Record not present on side A'
                          end)
                  from table t2
                  where t2.user_1 = t.user_1
                 );