У меня есть следующие данные:
SectorKey Sector foo
1 A null
2 B null
... ... ...
1 null a
2 null b
2 null c
1 null d
2 null e
... ... ...
Я хочу обновить столбец Sector, когда он равен нулю, в зависимости от значения sectorKey, т.е. я хочу, чтобы Sector был 'A', когда SectorKey равен 1, и 'B', когда SectorKey равен 2
Я пробовал этот запрос:
update tbFoo
set Sector=A.sector
from tbFoo A INNER JOIN tbFoo B
ON A.SectorKey=B.SectorKey
and A.Sector is not null
and B.Sector is null
и получил это сообщение об ошибке:
Таблица 'tbFoo' неоднозначна.
Я пытался создать псевдоним первого tbFoo, но, похоже, это неверный синтаксис. Я не понимаю, почему SQLServer жалуется на неоднозначное именование, так как у меня все псевдонимы для всех таблиц.
Я нашел эту ветку , и мне кажется, что я делаю то же самое, что и в ответе с голосованием. Я также попробовал запрос, предложенный в принятом ответе:
update tbFoo A
set Sector =
(select Sector from tbFoo
where A.SectorKey=SectorKey and Sector is not null)
и затем SQLServer жалуется на неправильный синтаксис рядом с 'A'
Есть идеи о том, что может происходить и как это исправить? Я использую SQLServer 2008.
РЕДАКТИРОВАТЬ Я не показал полные данные моей таблицы. У меня не только два случая (A и B), а несколько тысяч случаев. Так что явный случай не вариант