Выберите конкретный столбец на основе другого значения столбца
У меня есть таблица вроде этого
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-сопоставления в другую таблицу).