Во-первых, я бы начал с суммирования и именования всех этих данных, используя строки вместо столбцов.Вы можете включить (необязательно) предложение where, чтобы получить
SELECT munic, origin, date, hour, sum(presence)
from my_tab
/*OPTIONAL where clause to limit to specific countries, origins, dates, hours*/
WHERE origin in ('Germany','Italy','France',....)
and date in ('2016-10-08','2016-10-09',...)
group by munic, origin, date, hour
С запросом, как написано выше, вы получите необходимые данные в виде строки (не столбца).Кроме того, вы НЕ получите «пустых» строк, где данных не существует.Пример: если в «Германии» нет строки для 2016-10-08 18:00:00, то она просто не будет существовать.Если вам нужны эти данные, вам нужно найти способ генерировать пустые строки.Один из способов сделать это - иметь таблицу, представление или подзапрос, который просто возвращает имя каждой страны ... затем есть другой, который возвращает каждый период времени, и другой, который возвращает каждую дату.Затем вы НАРУЖНО присоединяетесь к каждой из этих таблиц, что поможет создать ваши «пустые строки».
Более того, само собой разумеется, что ваши даты, часы или список стран могут измениться в будущем (пример:Вы запускаете '2016-10-08' прямо сейчас, но вам может понадобиться другая дата в следующий раз, когда вы запустите этот запрос, поэтому дополнительная проблема заключается в том, чтобы этот запрос не нуждался в куче правок каждый раз, когда вызапустите «отчет» по-разному.
Это большая часть проблемы, которая будет зависеть от вас, чтобы определить, что имеет смысл (мы ограничиваем данные вообще или просто получаем ВСЕ ... основаны ли даты на запросах)от «даты начала» + X лет и т. д.) С предоставленной вами информацией трудно сказать, что поможет в этом отношении.
После этого первоначального процесса «получения данных вФормат строки "завершен, теперь вам нужно будет сделать" поворот ", чтобы переключить строки в столбцы ... Как уже говорилось ранее, это не то, что SQL делает изначально или легко. Самое простое решение - это использоватьРешение без SQL для преобразования ваших данных в массив, объект или другую форму с использованием кода приложения.Конечно, это также может быть сделано с использованием pl / PGSQL или другого языка БД, или, в качестве альтернативы, (с большими усилиями) может быть преобразовано в SQL для возврата данных JSON в нужном формате.Конечно, вашему приложению все равно нужно будет правильно интерпретировать JSON, что логически приводит к выводу, что если вы можете писать код приложения, вы должны делать то, что проще всего .... и самым простым решением будет "Group / SUM"данные в SQL, затем переберите их и создайте окончательный набор данных в коде приложения.