Обновить поле на основе значения другого поля в той же таблице - PullRequest
0 голосов
/ 08 октября 2009

Вот моя ситуация, у меня есть таблица с именем 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 с одинаковым типом 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

Так, например, все места для 5522005 должны быть 1101, если франшиза - «F», и 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 для того же идентификатора местоположения следующим образом:

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 голосов
/ 08 октября 2009

Судя по коду, вы увеличиваете @NewSiteNum в два раза. Однажды наверху в SELECT @NewSiteNum = MAX(SiteNum)+1 и снова в SET SITENUM = SELECT @NewSiteNum, @NewSiteNum = @NewsiteNum + 1

Вот откуда берутся 1103, 1108, 1109. У вас есть 1101 с приращением в два раза до 1103, с 1106 приращением в два раза до 1108 и т. Д.

Можете ли вы объяснить, почему вы увеличиваете их? Я не уверен, что неправильно понял ваш вопрос, но мне кажется, что вы просто хотите выполнить поиск, сравнить и заменить, а не увеличивать что-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...