Sql 如何通过指定序号重命名项目?
我有下表:Sql 如何通过指定序号重命名项目?,sql,sql-server,tsql,pivot,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,
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')
我想要的是将所有经销商重命名为“Dealer1”、“Dealer2”、“Dealer3”。编号应按升序分配:AO
应重命名为'Dealer1'因为AO
以A
开头,西部最佳
应重命名为Dealer2
因为它以B
开头,WestCarDealer
应重命名为Dealer3
,因为它以W
开头
因此,所需的输出应如下所示:
(226, 1, 'Dealer3')
, (112, 1, 'Dealer3')
, (266, 2, 'Dealer1')
, (112, 2, 'Dealer1')
, (93, 3, 'Dealer2')
, (93, 3, 'Dealer2')
唯一的经销商名称
的大约数量为50家经销商
我怎样才能用这种方式给汽车经销商重新命名
为此,我尝试使用游标,但无法存储要递增的数字。您可以使用CTE更新表格变量 示例
;with cte as (
Select *
,NewVal = concat('Dealer',dense_rank() over ( order by DealerName))
From @OperatorPrice
)
Update cte Set DealerName = NewVal
ID DealerId DealerName
226 1 Dealer3
112 1 Dealer3
266 2 Dealer1
112 2 Dealer1
93 3 Dealer2
93 3 Dealer2
更新@OperatorPrice
;with cte as (
Select *
,NewVal = concat('Dealer',dense_rank() over ( order by DealerName))
From @OperatorPrice
)
Update cte Set DealerName = NewVal
ID DealerId DealerName
226 1 Dealer3
112 1 Dealer3
266 2 Dealer1
112 2 Dealer1
93 3 Dealer2
93 3 Dealer2
这只是为了混淆数据还是什么?老实说,你在这里挣扎是因为你的表没有正常化。DealerName应该位于数据库中的一个位置,而且只能位于一个位置,最像Dealers表。“把它放在另一张桌子上表明它的设计很糟糕。”@SeanLange是的,我知道。我的SQL知识非常贫乏,我不是这个表的设计者,但我想找到一种方法来做到这一点。我不打算用这个数据永久地更新表,它只是临时表所必需的。如果这个问题很愚蠢,我真的很不好意思问这个问题,但我已经尽力了。谢谢你的理解,比我快几秒钟,约翰。一如既往地干得好@“我要去迪斯尼世界!”@SeanLange是认真的吗?我有那么老吗?几乎没有。我不得不去查一下,我猜这是关于80年代末的商业广告的,大约10年前,这些广告又死灰复燃了。我从来都不是一个大的电视观众,所以它想念我。此外,在那段时间里,我一天中的大部分时间都有点模糊……嗯。。。。college@StepUp总是乐于助人