首页 > 解决方案 > 在动态数据透视表上添加另一列并计算 null/0 值

问题描述

我有一个有效的动态枢轴代码。因为我试图找到一种方法来添加另一个计算 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;`

结果是:

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

请帮忙。

标签: mysqlmariadbpivot-table

解决方案


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


推荐阅读