2014-09-11 3 views
1

Мои данные выглядит как:Извлечение значения в виде отдельного столбца в зависимости от другого столбца

col1 col2 attr val 
ABC  123  A  10 
ABC  123  B  18 
XYZ  123  A  5 
XYZ  123  B  11 
ABC  888  A  24 
ABC  888  B  13 
XYZ  888  A  25 
. 
. 
. 

В основном различные комбинации col1, col2 существуют; и соответствующие каждому связанному с ними attr, они имеют отдельную запись для val.

мне нужен выход в виде:

col1 col2 A_val B_val 
ABC  123  10  18 
XYZ  123  5  11 

(для каждой уникальной комбинации col1 col2)

Этот вид запроса является новой территорией для меня, так что я не уверен, где Начало. Вероятно, это связано с чем-то вроде CASE WHEN attr='A' THEN val END as A_val, но я не уверен, как его структурировать.

ответ

1

Вы можете сделать что-то вроде:

SELECT col1, 
     col2, 
     MAX(CASE WHEN attr='A' THEN val END) A_val, 
     MAX(CASE WHEN attr='B' THEN val END) B_val 
    FROM table_name 
GROUP BY col1, 
     col2 

Как NULL s пришел последний в упорядочении нисходящем и CASE возвращает NULL для не в состоянии соответствовать, MAX даст вам правильный атрибут для каждого столбца.

Смежные вопросы