使用SQL根据具有重复值的字段分配id

时间:2014-06-11 21:04:23

标签: sql sql-server-2012

数据输入中的错误我需要根据另一个表中的值更改表中的值。解释的最好方法是展示一个“人为的例子”。

Site Table

SiteId       SiteName
----------------------
1            Chicago
2            New York
3            Boston
4            Chicago
5            New York
6            Boston

Project Table

ProjectName      SiteId
---------------------------
Project #1         1
Project #2         2
Project #3         2
Project #4         3

我需要更新项目表以使用SiteId表中的“第二”Site个集合而不是正在使用的集合。例如,我需要项目表看起来像......

ProjectName      SiteId
---------------------------
Project #1         4
Project #2         5
Project #3         5
Project #4         6

我最初想到的是自我加入,但我不确定如何区分SiteName值。我可以使用SiteName加入,但如何确保分配第二组SiteId

实际列表很长,所以我不能手工完成。

更新:项目名称是唯一的,项目表还有唯一的行标识符。

2 个答案:

答案 0 :(得分:0)

试试这个:

UPDATE p
SET p.SiteId=s2.SiteId
FROM Project p
INNER JOIN Site s on s.SiteId=p.SiteId
INNER JOIN (
SELECT SiteName,MAX(SiteId) as SiteId 
FROM Site
GROUP BY SiteName) s2 on s2.SiteName=s.SiteName

答案 1 :(得分:0)

UPDATE P 
SET SiteId = S.maxSiteId 
FROM Project P 
INNER JOIN (SELECT MAX(SiteId) AS maxSiteId,
                   MIN(SiteId) AS minSiteId
            FROM   Site 
            GROUP BY SiteName) S 
   ON P.SiteId = S.MinSiteId