我需要使用变量对表中的字段执行更新,但我需要在组更改时更改变量。它只是一个INTt,所以例如,如果我下面的例子我想用1和flordia用下一个数字2更新德州的记录:
更新表 设置StateNum = @Count 从表 其中xxxxx GROUP BY州
组更新变量 德州1 德州1 佛罗里达州2 佛罗里达2 佛罗里达州2
答案 0 :(得分:1)
我认为你应该使用状态及其编号StateNum
的查找表然后你应该将这个数字而不是名字存储到你的表中。
您可以在可更新的CTE中使用DENSE_RANK
:
- 模型数据
DECLARE @tbl TABLE([state] VARCHAR(100),StateNum INT);
INSERT INTO @tbl([state]) VALUES
('Texas'),('Florida'),('Texas'),('Nevada');
- 您的更新声明
WITH updateableCTE AS
(
SELECT StateNum
,DENSE_RANK() OVER(ORDER BY [state]) AS NewValue
FROM @tbl
)
UPDATE updateableCTE SET StateNum=NewValue;
- 检查结果
SELECT * FROM @tbl;
然后您应该使用它来获取查找表的数据
SELECT StateNum,[state] FROM @tbl GROUP BY StateNum,[state];
然后从原始表中删除state-column,并让StateNum成为外键。