根据同一个表中另一个字段的值更新字段

时间:2009-10-08 13:20:02

标签: sql-server

这是我的情况,我有一个名为Monthly_Hierarchy的表,如下所示:

SITENUM       LOCATION_ID         FRANCHISE
1101          5522005             R
1101          5522005             F
1102          5522005             R
1102          5522005             F

1103          5522006             R
1103          5522006             F
1104          5522006             R
1104          5522006             F

此表中约有3204个条目。我想要做的就是使相同的location_id的所有sitenums具有相同的franchise_type,相同。

因此,在修改之后,我的表应该看起来像这样:

SITENUM       LOCATION_ID         FRANCHISE
1101          5522005             R
1102          5522005             F
1101          5522005             R
1102          5522005             F

1103          5522006             R
1104          5522006             F
1103          5522006             R
1104          5522006             F

例如,如果特许经营权为“F”,5522005的所有网站应为1101,如果特许经营权为1102,则为1102。我有2个单独的桌子,其中所有F特许经营权的网站和位置以及所有R特许经营权相同。目前我的代码如下所示:

BEGIN TRANSACTION 
    DECLARE @NewSiteNum int 
    SELECT @NewSiteNum = MAX(SiteNum)+1 FROM [Monthly Hierarchy Table] 

    UPDATE Monthly_Hierarchy  
    SET SITENUM = SELECT @NewSiteNum, 
        @NewSiteNum = @NewSiteNum + 1
    FROM Monthly_Hierarchy m
      JOIN F_hierarchy f
        on m.location_id = f.location_id
    where m.franchise='f'
END

    UPDATE Monthly_Hierarchy  
    SET SITENUM = R.sitenum
    FROM Monthly_Hierarchy m
      JOIN R_hierarchy r
        on m.location_id = r.location_id
    where m.franchise='R'

我无法弄清楚如何使用我当前的代码从原始表到达最终表。我持续得到的是F特许经营权增加的网站,其位置ID如下:

SITENUM       LOCATION_ID         FRANCHISE
1101          5522005             R
1106          5522005             F
1101          5522005             R
1107          5522005             F

1103          5522006             R
1108          5522006             F
1103          5522006             R
1109          5522006             F

我如何解决这个问题并使它们统一起来?

1 个答案:

答案 0 :(得分:0)

根据代码判断,你将两次递增@NewSiteNum。在SELECT @NewSiteNum = MAX(SiteNum)+1SET SITENUM = SELECT @NewSiteNum, @NewSiteNum = @NewsiteNum + 1

中再次登顶

这就是1103,1108,1109的来源。您有1101递增两次到1103,1106递增两次到1108等等。

你能解释一下为什么要增加它们吗?我不确定我是否误读了你的问题,但在我看来,你只是想做一种查找,比较和替换,而不是增加任何东西。