我有一个sql列nvarchar(200),它具有以下值
xxx {"Name":"Stack"} yyy
aaa {"Name":"Overflow"} bbb
ccc {"Name":Stack"} ddd
eee {"Name":"Overflow"} fff
我想删除名称相同的第一个重复行,即在上面的示例中我想删除3行和4行,因为它包含重复的名称,但我想保留第一行和第二行
我怎样才能做到这一点?
答案 0 :(得分:2)
假设您感兴趣的部分由“{”和“}”分隔,并且您有一个id来建立排序(即定义什么是第一个),那么您可以使用相对直接的查询来执行此操作。
最里面的子查询找到“名称”定义。下一级使用row_number()
为每个级别分配一个序号,最外层选择第一个:
select t.*
from (select t.*,
row_number() over (partition by NamePortion order by id) as seqnum
from (select t.*,
substring(t.col,
charindex('{', t.col),
charindex('}', t.col) - charindex('{', t.col)
) as NamePortion
from t
) t
) t
where seqnum = 1