Вы можете сделать это только с CASE
и LIKE
:
SELECT ((CASE WHEN ',' + [value] + ',' LIKE '%,Canadian,%' and fieldid = 78
THEN 5 ELSE 0
END) +
(CASE WHEN ',' + [value] + ',' LIKE '%,US,%' and fieldid = 78
THEN 3 ELSE 0
END) +
(CASE WHEN ',' + [value] + ',' LIKE '%,UK,%' and fieldid = 78
THEN 1 ELSE 0
END) +
(CASE WHEN ',' + [value] + ',' LIKE '%,Australia,%' and fieldid = 78
THEN 1 ELSE 0
END) +
(CASE WHEN ',' + [value] + ',' LIKE '%,Israel,%' and fieldid = 78
THEN 1 ELSE 0
END) +
(CASE WHEN ',' + [value] + ',' LIKE '%,Others,%' and fieldid = 78
THEN 1 ELSE 0
END)
) as val
Тем не менее я настоятельно, настоятельно рекомендую вам не хранить несколько значений в одном столбце. SQL предназначен для хранения одного значения в столбцах (по крайней мере для скалярных типов столбцов, а строка - скалярного типа).
У вас должна быть отдельная таблица, представляющая собой таблицу соединений / связей с одной строкой для каждой сущности и страны.
РЕДАКТИРОВАТЬ: Если вы использовали SQL Server 2017 или у вас была функция разделения строки, я бы посоветовал вам сделать это следующим образом:
SELECT t.ID, t.[value], COALESCE(s.points, 0) as points
FROM tab t OUTER APPLY
(SELECT SUM(CASE WHEN s.[value] = 'Canadian' THEN 5
WHEN s.[value] = 'US' THEN 3
WHEN s.[value] IN ('UK', 'Australia' , 'Israel', 'Others') THEN 1
END) AS Points
FROM STRING_SPLIT(t.[value], ',') s
WHERE t.fieldid = 78
) s
ORDER BY t.id;