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请试一试。