表:tbl1
字段:id
,name
id name
1 a 1 a 1 a 1 b
我喜欢重复名称和Id的地方(id = 1,name = a || id = 1,name = a || id = 1,name = a)。
更改为
id = 1,name = a1 || id = 1,name = a2 || ID = 1,名称= A3
Linq&& SqlServer的
答案 0 :(得分:1)
请注意,这是我解释问题含义的最佳尝试。如果我离开基地,请回复:)我提出了一个使用一次性SQL查询来更新输出的解决方案,因为这对于LINQ解决方案来说可能有点过于复杂。
这是一个查询,它将生成一个id和名称表,只要id和name相同,名称就会附加一个索引值。它的工作原理是生成行号并计算相同的值。如果相同值的计数大于1,则行号用于生成附加到名称的索引。请注意,这不能修改现有表,因为当没有唯一标识符时,无法以这种方式更新记录。您必须将其输出到新表中并使用它:
;with T as (
select
row_number() over (order by id, name) as idx,
id,
name,
(select count(*) from [tbl1] b where b.id=a.id and b.name=a.name) as count
from
[tbl1] a
)
select
id,
case when
count > 1 then
name +
cast(
(select count(*) from T b where b.id=T.id and b.name=T.name
and b.idx<T.idx) + 1
as varchar(50))
else
name
end
from
T
使用此查询,如果tbl1包含以下输入:
1 a
1 a
1 a
1 b
2 a
2 a
2 b
2 b
2 b
2 c
2 c
2 d
1 e
将生成以下输出:
1 a1
1 a2
1 a3
1 b
1 e
2 a1
2 a2
2 b1
2 b2
2 b3
2 c1
2 c2
2 d
如果这没有回答你的问题,请告诉我。希望这有帮助!