2016-05-22 3 views
1

У меня есть таблица «tbl_marks», как это,SQL запрос для поворота колонны

st_index Subject  Term  Marks 
---------------------------------------- 
13110  Maths  1  60 
13110  Maths  2  70 
13110  Maths  3  80 
13110  Science  1  70 
13110  Science  2  70 
13110  Science  3  80 
13111  Maths  1  90 
13111  Maths  2  70 
13111  Maths  3  80 
13111  Science  1  80 
13111  Science  2  70 
13111  Science  3  80 

то мне нужно, чтобы показать следующий результат после фильтра срок от 1

st_index Maths  Science  
-------------------------------- 
13110  60   70   
13111  90   80 

для движения я нахожусь с этим кодом, что не ожидал выхода

SELECT st_index, 
    (case when subject='Maths' then marks end)as 'Maths', 
    (case when subject='Science' then marks end)as 'Science' 
FROM tbl_marks 
where term=1 
group by st_index 

ответ

1

вы очень близки, все, что вам нужно, чтобы обернуть CASE EXPRESSION Wi й функцию агрегации, как MAX()/MIN():

SELECT st_index, 
     MAX(case when subject='Maths' then marks end) as Maths, 
     MAX(case when subject='Science' then marks end) as Science 
FROM tbl_marks 
where term=1 
group by st_index 

Кстати - это называется условной агрегации, делает такую ​​же функциональность в качестве шарнира, но это две разные вещи.

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