归一化表
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组的类型应该有有效的标志,它应该被写成两个单独的更新语句,有人能澄清我吗?
首先使用以下方法填充表 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