Mysql создавать столбцы из определенных строк таблиц - PullRequest
0 голосов
/ 17 октября 2018

У меня есть эти три таблицы

Таблица № 1: Идентификаторы кораблей

Ship ID                         Ship Code
1                               ALBE
2                               AMBS
3                               AMBR

Таблица № 2: Данные об оборудовании

Ship ID               Equipment_ID           
1                       1001
1                       1002
1                       1003
2                       1004
2                       1005
2                       1006
3                       1007
3                       1008
3                       1009

Таблица № 3: Счетчики

Equipment_ID       Hours          Date_Updated
1001                2                2018-01-01
1001                4                2018-05-01
1002                3                2018-01-01
1002                5                2018-05-01
1003                5                2018-01-01
1003                10               2018-05-01
1004                1                2018-01-01
1004                6                2018-05-01
1005                3                2018-03-01
1006                6                2018-03-01
1007                5                2018-01-01
1007                12               2018-05-01
1008                15               2018-01-01
1008                19               2018-05-01
1009                4                2018-01-01
1009                12               2018-06-01 

Я хочу получить следующий результат:

Для каждого Корабельного Кода последние часы счетчика и equipment_id, классифицированные как AE1, AE2, AE3, где AE1 равны 1001 1004 100 AE2 равны 1002 1005, 1008 и AE3 - 1003,1006,1009

Ship Code       AE1         AE2         AE3
ALBE            4           5           10
AMBS            6           6           12
AMBR            12          19          12

Как мне создать эту динамическую сводную таблицу?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Использовать условную агрегацию:

select s.ship_code,
       sum(case when e.equipment_id in (1001, 1004, 1007) then hours else 0 end) as ae1,
       sum(case when e.equipment_id in (1001, 1004, 1007) then hours else 0 end) as ae2,
       sum(case when e.equipment_id in (1003,1 006, 1009) then hours else 0 end) as ae3
from ships s left join
     equipment e
     on e.ship_id = s.ship_id left join
     counters c
     on c.equipment_id = e.equipment_id
group by s.ship_code;
0 голосов
/ 17 октября 2018

Вы могли бы подойти к сводной таблице следующим образом:

 Ship Code       Equipment ID           Hour Type       
 ALBE            4                      AE1
 AMBS            6                      AE1
 AMBR            12                     AE2
 AMBR            12                     AE3

Таким образом, вы могли бы запросить ее проще

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