Используйте LEFT JOIN
вместо INNER JOIN
, потому что вы хотите, чтобы и несопоставленные строки тоже и CASE
выражение или IIF()
обновляли столбец:
UPDATE S
SET [AH_Field] = IIF(D.[WK_Field] IS NULL, 'No Show', 'Done')
FROM [SX_Appmts_Db].[dbo].[Sx_Appmts_Table] S LEFT JOIN [SX_Services_db].[dbo].[Sx_Services_Table] D
ON S. [AA_field] = D.[WK_Field]
AND S.[AA_Field] = D.[WK_Field]
AND S.[AD_Field] LIKE D.[AA_Field]
AND convert(varchar(10), S.[AK_Field], 101) = convert(varchar(10), D.[DV_Field], 101)
AND convert(varchar(10), S.[AQ_Field], 101) = convert(varchar(10), D.[AD_Field], 101)
WHERE S.[AH_Field] LIKE 'Scheduled' AND S.[AK_Field] IS NOT NULL AND S.[AQ_Field] IS NOT NULL
Условия, которые у вас были в предложении WHERE
, включающем столбцы из таблицы, [Sx_Services_Table]
перемещаются в предложение ON
, чтобы сохранить целостность LEFT JOIN
. Также я не вижу причины для оператора LIKE
в этом состоянии:
S.[AH_Field] LIKE 'Scheduled'
Вы можете использовать =
вместо LIKE
.