在动态数据透视表上添加另一列,并计算null / 0值

时间:2019-01-21 14:06:03

标签: mysql mariadb pivot-table

我有一个有效的动态枢纽代码。自从我试图找到一种方法来添加另一列计算0或null的列以来,我就停留了将近1周。

  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;`

导致以下结果:

pivot

现在我想在动态表中添加另一列,该列计算0或null值。

pls帮助。

1 个答案:

答案 0 :(得分:0)

您需要一个单独的表,其中包含所有日期。 (或者至少有足够的日期来处理您的日期范围。)MariaDB(不是MySQL)具有序列表的简洁功能。例如,seq_1_to_100是一个虚拟表,其中包含从1到100的所有整数。将类似的内容与+ INTERVAL seq一起使用以生成所有日期。然后将LEFT JOIN与我们的表一起获取“缺失”日期以生成NULL值。如果需要,用0将其更改为IFNULL()