更新视图中的重复值以使其唯一

Posted

技术标签:

【中文标题】更新视图中的重复值以使其唯一【英文标题】:Update duplicate values in a view to make unique 【发布时间】:2021-12-17 23:24:24 【问题描述】:

我查看了以前的答案,但找不到如何更新列中具有重复值的视图并使它们唯一。

例如,我有一个包含 c1、c2、c3 列的视图,需要更新 c3 中的值以使其唯一,如下所示:

c1 c2 c3
ab - 99 bc - 45 ba - 12
df - 45 ef - 67 ba - 12
gh - 55 sh - 23 kj - 45

我需要更新 c3 列中“ba - 12”的值,通过在破折号前添加一个数字或字符使它们唯一,使“ba - 12”变为“ba1 - 12”或类似的东西

结果:

c1 c2 c3
ab - 99 bc - 45 ba1 - 12
df - 45 ef - 67 ba2 - 12
gh - 55 sh - 23 kj - 45

【问题讨论】:

请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

窗口函数row_numbercount 会有所帮助。新的c3 变为:如果窗口(partition by c3) 内的记录数为1,则c3 否则c3 用该窗口内的行号装饰。

create or replace view the_updated_view as
select c1, c2, 
    case when cnt = 1 then c3 
         else replace(c3, ' -', '.'||rn||' -') 
    end as c3
from 
(
  select *, row_number() over w rn, count(*) over w cnt
  from the_table
  window w as (partition by c3)
) t;

【讨论】:

以上是关于更新视图中的重复值以使其唯一的主要内容,如果未能解决你的问题,请参考以下文章

我应该在哪里添加我的子视图以使其位于 UITableViewController 中的表视图下?

如何调节变量以使其获取 IN 子句中的所有值 [重复]

将递增数字添加到 JSON 对象字符串以使其唯一

PSQL - 查找所有值并根据另一列中的非唯一值使其唯一

什么可以替换查询中的 IN 子句以使其更快?

如何显示图像的唯一部分