Добавьте еще один столбец в динамическую сводную таблицу и посчитайте значения null / 0 - PullRequest
0 голосов
/ 21 января 2019

у меня есть рабочий динамический сводный код. я застрял на этой почти 1 неделе, так как я пытался найти способ добавить другой столбец, который считает 0 или ноль.

  SET @sql_dynamic:= (SELECT GROUP_CONCAT
                        (DISTINCT 
                          CONCAT('if(sum(if(attendance_date = "',
                              date_format(attendance_date, '%Y-%m-%d'),
                              '",1,0))=0,0,attendance_status) AS `',
                               date_format(attendance_date, '%Y-%m-%d'),'`'
                            )
                           ) from attendance
                             WHERE subject_id=1 AND attendance_month = "January"
                      );


             SET @sql = CONCAT('SELECT studentidnumber, student_fullname, 
                          subject_id, attendance_month, ', @sql_dynamic,'
                            FROM attendance
                            WHERE subject_id=1 AND attendance_month = "January"
                            GROUP BY studentidnumber'
                         );

  PREPARE stmt FROM @sql;
  EXECUTE stmt;`

что приводит к этому:

стержень

Теперь я хочу добавить еще один столбец в динамическую таблицу, которая считает 0 или нулевые значения.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 21 января 2019

Вам нужна отдельная таблица со всеми датами в ней. (Или, по крайней мере, достаточно дат для обработки вашего диапазона дат.) MariaDB (не MySQL) имеет удобную функцию таблиц последовательности. Например, seq_1_to_100 - это виртуальная таблица, которая содержит все целые числа от 1 до 100. Используйте что-то подобное вместе с + INTERVAL seq для генерации всех дат. Затем LEFT JOIN с нашей таблицей, чтобы получить «пропущенные» даты для генерации NULL значений. Измените их на 0 с IFNULL(), если хотите.

...