2014-10-27 3 views
1

Это мой стол под названием «полеты»:Как сгруппировать полеты по расписанию по дням недели?

| ORIGIN | DESTINATION | DAY_OF_WEEK | DEPARTURE_HOUR | FLIGHT_NUMBER | AIRLINE  | 
------------------------------------------------------------------------------------- 
| FRA | MAD  |  1  |    |    | Lufthansa | 
| FRA | MAD  |  3  |    |    | Lufthansa | 
| FRA | MAD  |  6  |    |    | Lufthansa | 
| LHR | MUC  |  1  |    |    | Lufthansa | 
| LHR | MUC  |  2  |    |    | Alitalia | 
| JFK | EWR  |  5  |    |    | Delta  | 
| BCN | MAD  |  7  |    |    | Ryanair  | 
| FRA | MAD  |  7  |    |    | Lufthansa | 
| FRA | MAD  |  1  |    |    | Iberia  | 

Вопрос заключается в том, как получить график сгруппированных по происхождению, назначения, авиакомпании и день недели, например:

FRA -> MAD 1*3**6*7 Lufthansa 
FRA -> MAD 1******* Iberia 
LHR -> MUC 12****** Alitalia 
JFK -> EWR ****5*** Delta 
BCN -> MAD *******7 Ryanair 

Мой текущий запрос есть: SELECT origin, destination, airline FROM flights GROUP BY origin, destination, airline ORDER BY origin;, но, как вы можете видеть, он не возвращает дни недели, сформированные как 1*3*567.

ответ

3

Похоже, вы пытаетесь получить pivot свои результаты. Вы можете сделать это с MAX и CASE:

select origin, destination, airline, 
    max(case when day_of_week = 1 then '1' else '*' end) as `1`, 
    max(case when day_of_week = 2 then '2' else '*' end) as `2`, 
    max(case when day_of_week = 3 then '3' else '*' end) as `3`, 
    max(case when day_of_week = 4 then '4' else '*' end) as `4`, 
    max(case when day_of_week = 5 then '5' else '*' end) as `5`, 
    max(case when day_of_week = 6 then '6' else '*' end) as `6`, 
    max(case when day_of_week = 7 then '7' else '*' end) as `7` 
from flights 
group by origin, destination, airline 
order by origin; 

Это было не ясно, если они должны быть одного столбца или нет - я оставил их отделили, но достаточно легко concat вместе.

+0

Это замечательно! Благодарю. –