sql - 如何通过分配序列号重命名项目?

标签 sql sql-server tsql pivot

我有下表:

DECLARE @OperatorPrice TABLE 
(
    ID INT NOT NULL, DealerId INT NULL, DealerName VARCHAR(50) NULL
)

和样本数据:
INSERT INTO @OperatorPrice 
(
    ID, DealerId, DealerName
)
VALUES
  (226, 1,  'WestCarDealer')
, (112, 1,  'WestCarDealer')
, (266, 2, 'AO')
, (112, 2, 'AO')
, (93,  3, 'Best on the West')
, (93,  3, 'Best on the West')

我想要的是将所有经销商重命名为“经销商 1”、“经销商 2”、“经销商 3”。编号应按升序分配:AO应重命名为“经销商 1”,原因 AOA 开头, Best on the West应该重命名为 Dealer2因为它以 B 开头, WestCarDealer应该重命名为 Dealer3因为它以 W 开头.

因此所需的输出应如下所示:
  (226, 1, 'Dealer3')
, (112, 1, 'Dealer3')
, (266, 2, 'Dealer1')
, (112, 2, 'Dealer1')
, (93,  3, 'Dealer2')
, (93,  3, 'Dealer2')

独特的近似数量 DealerName是50个经销商。

我怎样才能以这种方式重命名汽车经销商?

为此,我尝试使用游标,但无法存储要递增的数字。

最佳答案

您可以使用 CTE 来更新表变量

示例

;with cte as (
Select *
      ,NewVal = concat('Dealer',dense_rank() over ( order by DealerName))
 From  @OperatorPrice
)
Update cte Set DealerName = NewVal

更新@OperatorPrice
ID  DealerId    DealerName
226 1           Dealer3
112 1           Dealer3
266 2           Dealer1
112 2           Dealer1
93  3           Dealer2
93  3           Dealer2

关于sql - 如何通过分配序列号重命名项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52432461/

相关文章:

Oracle 中的 SQL 路由查找器 - 递归?

c# - 如何从数据表中删除所有行

sql-server-2008 - 查询优化器运算符的选择-嵌套循环vs哈希匹配(或合并)

mysql - 如果 "on delete"设置为CASCADE,我应该为mysql中的外键 "on update"设置什么?

Mysql IF条件Left Join同一张表两次

mysql - 根据现有列中的值在新列中插入值

sql-server - EF4 - 选定的存储过程不返回任何列

tsql - SQL Server:使DATETIME持续30分钟

c# - 如何从 SQL 中检索多个值到标签

mysql - 从触发器调用的存储过程中的动态语句的解决方法