Sql 更新规范化表中的行

Sql 更新规范化表中的行,sql,normalization,Sql,Normalization,规范化表 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 - 如何编写一条update语句,以使生成的表按如下方式填充 ID SEQ Type Value Flag 1 1 a 100 valid 1 2

规范化表

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   -
如何编写一条update语句,以使生成的表按如下方式填充

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组的类型的第一次出现的值才应具有有效标志 它应该写为两个单独的更新语句吗? 有人能给我澄清一下吗?
非常感谢

首先使用
行编号()
填充表格,然后更新表格

备选案文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

您使用的是哪个SQL引擎?@zealous,Oracleand您正在填充规范化表吗?@zealous,是的表已填充,但此时标志列将为空first@zealous,包括一个seqcolumn@CrystalPaladin上面的更新语句不起作用吗?@CrystalPaladin尝试使用我在上面提供的
update
语句。@CrystalPaladin很乐意提供帮助。是否可以将排名结果与表合并,并在单个语句中使用更新?@CrystalPaladin请试一试。