Как отобразить последовательность дат в строках к столбцам - PullRequest
0 голосов
/ 18 февраля 2020

Табличные периоды с основным полем idPeriod и несколькими сотнями записей. Таблица date_classes с idPeriod и dateClass Есть также имена для отображения. Каждое имя имеет одинаковый период и 5 дат.

Каждый период имеет 5 дат.

+-----------+------------+
| idPeriode | dateClass  |
+-----------+------------+
|    302367 | 2020-02-18 |
|    302367 | 2020-02-25 |
|    302367 | 2020-03-03 |
|    302367 | 2020-03-10 |
|    302367 | 2020-03-17 |
+-----------+------------+

Я хотел бы показать:

+----------+---------------------+------------+------------+------------+------------+
| Name     | Period | Date1      | Date2      | Date3      | Date4      | Date5      |
+----------+---------------------+------------+------------+------------+------------+
| Bousquet | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Grignon  | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Rajotte  | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Vandal   | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Tessier  | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
| Beauvais | 302367 | 2020-02-18 | 2020-02-25 | 2020-03-03 | 2020-03-10 | 2020-03-17 |
+----------+--------+------------+------------+------------+------------+------------+

1 Ответ

0 голосов
/ 18 февраля 2020

Немного неясно, почему вы хотите сделать это, но это достижимо с помощью нескольких функций, реализованных в запросе. См., Например, следующий запрос:

SELECT NAME, idperiode,
       SUBSTRING_INDEX(dateclass,',',1) AS date_1,
       SUBSTRING_INDEX(SUBSTRING_INDEX(dateclass,',',2),',',-1) AS date_2,
       SUBSTRING_INDEX(SUBSTRING_INDEX(dateclass,',',3),',',-1) AS date_3,
       SUBSTRING_INDEX(SUBSTRING_INDEX(dateclass,',',4),',',-1) AS date_4,
       SUBSTRING_INDEX(dateclass,',',-1) AS date_5
FROM       
(SELECT NAME,
       idperiode,
       GROUP_CONCAT(dateclass ORDER BY dateclass) AS dateclass 
 FROM mytable
 GROUP BY NAME, idperiode) A;

Первая часть - это подзапрос, использующий GROUP_CONCAT для объединения всех дат (при условии, что все они находятся только в одной таблице). Затем используйте SUBSTRING_INDEX, чтобы отделить группированные даты. Вы можете просмотреть демонстрационную скрипку здесь

Если есть две таблицы без отношения, то вы можете использовать CROSS JOIN для таблиц. Я также подготовил скрипку здесь с небольшой модификацией подзапроса, тогда как внешний запрос все еще функционирует так же.

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