SQL: Связывание значения столбца с именем столбца для выполнения некоторых условий

#mysql #sql-server

Вопрос:

Таблицы

Основываясь на изображении, ТАБЛИЦА B-моя основная таблица, в то время как ТАБЛИЦА A-это правила или условия для ТАБЛИЦЫ B.

Я хочу написать запрос таким образом, чтобы при выполнении правила 1 в таблице A, которое обозначает столбец [C1], имеющий показатель 3. Затем найдите соответствующее имя столбца в ТАБЛИЦЕ B с соответствующим значением и замените значение ЗАПОЛНЕНИЯ. Результат, который я хотел получить, похож на ТАБЛИЦУ C.

Как я могу это сделать?

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

1. Я не понимаю — почему только строки 2 и 3 получают обновленную заливку?

2. потому что в строке 2 есть 3 в c1 и 6 в c2, которые соответствуют показателю в таблице A.

Ответ №1:

Вам просто нужно присоединиться на основе OR условия для обоих столбцов

Предпочтительно агрегировать с MAX на всякий случай, если есть несколько совпадений

 SELECT  b.c1,  b.c2,  ISNULL(a.fill, b.fill) AS fill FROM TableB b OUTER APPLY (  SELECT MAX(fill) AS fill  FROM TableA a  WHERE a.[column] = 'c1' AND b.c1 = a.ind  OR a.[column] = 'c2' AND b.c2 = a.ind ) a;  

Ответ №2:

Вы можете достичь этого с помощью pivot . Изменение имен столбцов в таблице А из строк в столбцы.

 select B.c1,B.c2, (CASE WHEN A.ind IS NULL THEN 0 ELSE 1 END) AS fill from tblB AS B left outer join (select * from  (  select [column], ind, fill  from tblA  ) src pivot (  max(fill)  for [column] in ([c1], [c2]) ) piv ) AS A ON (B.c1 = A.ind or B.c2 = A.ind)