Выберите определенный столбец на основе значения другого столбца - PullRequest
16 голосов
/ 27 июля 2010

У меня есть такая таблица

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

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

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

Ответы [ 4 ]

21 голосов
/ 27 июля 2010
SELECT CASE
          WHEN Type = 0 THEN Val0
          WHEN Type = 1 Then Val1
          .
          .
          WHEN Type = N Then ValN
       END 
  FROM tbl
3 голосов
/ 27 июля 2010

Как я читаю, нужно использовать 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 (потому что он удаляет дубликаты).

Это можно сделать динамически.

2 голосов
/ 27 июля 2010

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

1 голос
/ 27 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...