2016-03-19 3 views
-3

Я новичок, пожалуйста, помогите мне, У меня есть данные в таблице с 4 колонки, что-то вроде этого:Выход вид матрицы из таблицы

+---------------------+ 
| id ah av score | 
+---------------------+ 
| 1 A A 1  | 
| 2 A B 2  | 
| 3 B A 0.5  | 
| 4 B B 0.14 | 
+---------------------+ 

Я хочу, чтобы вывести результат запроса что-то вроде этого

+-------------------+ 
| Type A B  | 
+-------------------+ 
| A  1 2  | 
| B  0.5 0.14 | 
+-------------------+ 
+0

Ok. У вас есть вопрос? – Strawberry

+0

Любая идея, как решить в MySql? –

+0

мой текущий код: ВЫБОР ах, (случай, когда ау = «А» ТОГДА оценка END), как, (случай, когда ау = «B» ТОГДА оценка END) AS B АХП –

ответ

1
SELECT ah type 
    , MAX(CASE WHEN av = 'A' THEN score END) 'A' 
    , MAX(CASE WHEN av = 'B' THEN score END) 'B' 
    FROM my_table 
GROUP 
    BY ah; 
+------+------+------+ 
| type | A | B | 
+------+------+------+ 
| A | 1.00 | 2.00 | 
| B | 0.50 | 0.14 | 
+------+------+------+ 
1

Ваша проблема требует сводной таблицы, поскольку вы «поворачиваете» один из ваших столбцов, чтобы стать рядом.

Сначала создайте представление со всеми данными, вам необходимо (в значительной степени угробили ID):

create view Scores_Simple as (
select 
    ah as Type, 
    case when av = "A" then Score end as A, 
    case when av = "B" then Score end as B 
from Scores 
); 

Затем откинуть стол:

create view Scores_Simple_Pivot as (
select 
    Type, 
    sum(A) as A, 
    sum(B) as B 
from Scores_Simple 
group by Type 
); 

Tested here

+0

Спасибо за ваш ответ. Если бы я мог проголосовать за это больше, чем однажды, я бы хотел. Отличное, четкое и краткое объяснение общей проблемы, которая возникает, решение, которое я редко видел так хорошо объясненным! –

+0

@neraikudai Ну, вы всегда могли бы его перенести. Обратите внимание, что здесь нет необходимости в представлении. – Strawberry

+0

@strawberry, спасибо вам за более простое решение. –

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