CASE
можно избежать, если вы разделите свое обновление на два обновления
UPDATE FGJ
SET
[base_title]= NL.[ATYPCODE] -- however, this case had different condition in your original query!
[base_mande]= NL.[mande]+FGJ.[base_mande]
FROM [SuratMali_FinalGozareshJame] FGJ
INNER JOIN #tmp_notLinked NL
ON FGJ.CodeL = NL.[codelfinal]
WHERE NL.[atypcode_type] = 105 and NL.[ATYPCODE] = FGJ.[base_title]
UPDATE FGJ
SET
[base_title]= 0 -- however, this case had different condition!
[base_mande]= 0
FROM [SuratMali_FinalGozareshJame] FGJ
INNER JOIN #tmp_notLinked NL
ON FGJ.CodeL = NL.[codelfinal]
WHERE NL.[atypcode_type] != 105 or NL.[ATYPCODE] != FGJ.[base_title]
Однако, как я упоминаю в коде, ваши условия case
отличаются. Если это действительно так (не опечатка), то вы должны создать update
для каждого условия.
Также можно переписать решение, которое inner join
не указано явно, если вы используете подзапрос (см. Ниже). Это решение предполагает, что подзапрос возвращает только одно значение (например, если NL. [Codelfinal] является первичным ключом). Тем не менее, соединение все равно скрыто в синтаксисе, и нет смысла переписывать его так.
UPDATE FGJ
SET
[base_mande]= (
SELECT NL.[mande]
FROM #tmp_notLinked NL
WHERE FGJ.CodeL = NL.[codelfinal] and
NL.[atypcode_type] = 105 and
NL.[ATYPCODE] = FGJ.[base_title]
) + FGJ.[base_mande]
FROM [SuratMali_FinalGozareshJame] FGJ