更新标准化表中的行

问题描述 投票:-1回答:1

归一化表

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   -

我如何编写一条更新语句,使结果表的填充如下所示

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组的类型应该有有效的标志,它应该被写成两个单独的更新语句,有人能澄清我吗?

sql normalization
1个回答
1
投票

首先使用以下方法填充表 row_number() 然后更新表格。

选择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
© www.soinside.com 2019 - 2024. All rights reserved.