Выберите конкретный столбец на основе другого значения столбца

У меня есть таблица вроде этого

ID | Type | Val0 | Val1
1  |  0   |  A   | NULL
2  |  1   | NULL |  B

Мне нужно выбрать Val0, когда тип равен 0, и Val1, когда тип равен 1, и ValN, когда тип N...

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

Ответ 1

SELECT CASE
          WHEN Type = 0 THEN Val0
          WHEN Type = 1 Then Val1
          .
          .
          WHEN Type = N Then ValN
       END 
  FROM tbl

Ответ 2

Как я это прочитал, вам нужно использовать UNION:

SELECT a.val0
  FROM TABLE a
 WHERE a.type = 0
UNION ALL
SELECT a.val1
  FROM TABLE a
 WHERE a.type = 1
UNION ALL ...

UNION ALL не удаляет дубликаты и быстрее, чем UNION (поскольку он удаляет дубликаты).

Выполнение этого динамически возможно.

Ответ 3

При низких значениях N вы можете сделать это ad-hoc, используя оператор CASE, например CASE Type WHEN 0 THEN Val0 WHEN 1 THEN Val1 END. Если ваш N больше, вы, вероятно, должны нормализовать свою базу данных (т.е. Поместить идентификаторы = > ValN-сопоставления в другую таблицу).