在规范化 table 中更新行

Updating Rows in a normalized table

规范化table

ID SEQ Type Value Flag
1  1   a    100   -
1  2   a    200   -
1  3   a    250   -
1  4   b    200   -
2  1   a    150   -
2  2   b    100   -
2  3   b    200   -

如何编写单个更新语句,使生成的 table 填充如下

ID SEQ Type Value Flag
1  1   a    100   valid
1  2   a    200   repeat
1  3   a    250   repeat
1  4   b    200   valid
2  1   a    150   valid
2  2   b    100   valid
2  3   b    200   repeat

编辑:包含 seq 列

只有第一次出现的 ID 组类型值才应具有有效标志 它应该写成两个单独的更新语句吗? 有人可以澄清我吗? 非常感谢

首先使用 row_number() 填充 table,然后更新 table。

选项 1:

select
    Id,
    Type,
    Value,
    null as Flag,
    row_number() over (partition by ID, Type order by SEQ) as rnk
from yourTable

那么你可以使用 update

update yourTable
set flag = case
                when rnk = 1 then 'valid'
                else 'repeat'
            end

选项 2: 您可以不使用 update 语句,如下所示

select
    Id,
    SEQ,
    Type,
    Value,
    case
        when rnk = 1 then 'valid'
        else 'repeat'
    end as flag
from
(
    select
        Id,
        SEQ,
        Type,
        Value,
        row_number() over (partition by ID, Type order by SEQ) as rnk
    from yourTable
) val