как присвоить целочисленное значение строке и найти сумму в SQL

#sql #sql-server #ssms

Вопрос:

Привет, у меня есть стол, накрытый, как показано ниже

     clientId       lev1   lev2        lev3      lev4     lev5
      1            low    very-low    high      low      very-high
 

Я хочу сопоставить значение INT для low =2 ,very-low =1 ,high =4 ,very-high =5.
затем мне нужно найти сумму для каждого клиента .

здесь мне нужно добраться (2 1 4 2 5) = 14 Как я могу это сделать ?

Комментарии:

1. Вы имеете в виду карту , а не назначение. Создайте отдельную таблицу с отображением и объединитесь с ней

2. да, я хочу составить карту . извини за это . — поправил Кус.

3. Используйте CASE выражение и SUM эти значения.

4. я сделал это, брат . спасибо за помощь .

Ответ №1:

Я бы предложил использовать apply . На самом деле, вам вообще не нужны case выражения лица:

 select t.*, v.total
from t cross apply
     (select sum(v2.val) as total
      from (values (t.lev1), (t.lev2), (t.lev3), (t.lev4), (t.lev5)
           ) v(lev) join
           (values ('low', 2), ('very-low', 1), ('high', 4), ('very-high', 5)
           ) v2(lev, val)
           on v.lev = v2.lev
     ) v;
 

В основном это делается для того, чтобы отменить вывод уровней из пяти столбцов в пять строк (в подзапросе). Затем он сопоставляет их со значениями, которые вы указали. Наконец, sum() добавляет их все в один ряд.