基于组更新变量

时间:2018-04-13 14:49:59

标签: tsql variables sql-update

我需要使用变量对表中的字段执行更新,但我需要在组更改时更改变量。它只是一个INTt,所以例如,如果我下面的例子我想用1和flordia用下一个数字2更新德州的记录:

更新表 设置StateNum = @Count 从表 其中xxxxx GROUP BY州

组更新变量 德州1 德州1 佛罗里达州2 佛罗里达2 佛罗里达州2

1 个答案:

答案 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成为外键。