sql—使用附加条件将行号添加到现有列

wh6knrhe  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(249)

我有一个相应的数据结构:

ItemId ItemDescription
1      blahblah
2      blahblah
3      foobar
4      foobar
5      lorem
6      blahblah
7      lorem

我想根据itemid顺序和itemscription值对itemscription添加一个唯一的后缀。
期望结果:

ItemId ItemDescription
1      blahblah1
2      blahblah2
3      foobar1
4      foobar2
5      lorem1
6      blahblah3
7      lorem2

我尝试了一个成功的固定项目描述:

update item
set ItemDescription = ItemDescription + cast(row_num as varchar)
from (select ItemDescription , row_number() over (order by i.ItemId) as row_num 
      from Item i
      where i.ItemDescription = 'lorem') item

但是有几千个,所以我想用一个剧本/几个剧本来完成。看来我得用一个 row_number() 使用某种嵌套选择的函数,但到目前为止没有运气。

rm5edbpk

rm5edbpk1#

使用 partition by :

update item
    set ItemDescription = concat(ItemDescription, row_num)
from (select ItemDescription,
             row_number() over (partition by i.ItemDescription order by i.ItemId) as row_num 
      from Item i
     ) item;

请注意,您不应该使用 varchar 没有长度规格。为了解决这个问题,我用 concat() 而不是 + ,因为它会将数字转换为字符串。

相关问题