按另一列值更新列

时间:2015-01-24 10:07:22

标签: sql sql-server

我想按照示例中的另一个列值更新一个列值

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

2 个答案:

答案 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 
相关问题