我想按照示例中的另一个列值更新一个列值
Name Category CategoryID
-------+--------------+----------
apple fruit
mango fruit
patato Vagitable
india Country
Bhutan Country
我想更新上表,如下所示 逻辑是: - 按类别按不同方式排序并将ID分配给类别
然后更新每行的categoryID。 我需要sql查询。
Name Category CategoryID
-------+--------------+----------
apple fruit 2
mango fruit 2
patato Vagitable 3
india Country 1
Bhutan Country 1
答案 0 :(得分:1)
试试这个:
UPDATE T
SET T.CategoryId = D.Id
FROM YourTable AS T
INNER JOIN (SELECT Category, DENSE_RANK() OVER (ORDER BY Category) AS Id
FROM YourTable) AS D
ON T.Category = D.Category
答案 1 :(得分:0)
使用Dense_Rank()
返回结果集分区内的行级别,而不是 排名中的任何差距。行的等级是一加上的数量 排在相关行之前的不同排名。
如果两个或更多行绑定在同一分区中的等级,则每个行绑定 行获得相同的等级
select Name,Category, dense_rank() over(order by category) As CategoryId
From yourtable
更新表格
UPDATE A
SET CategoryId = B.CategoryId
FROM Yourtable A
INNER JOIN (SELECT Category,
Dense_rank()OVER(ORDER BY category) AS CategoryId
FROM Yourtable) AS B
ON A.Category = B.Category