我有一个有效的动态枢纽代码。自从我试图找到一种方法来添加另一列计算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值。
pls帮助。
答案 0 :(得分:0)
您需要一个单独的表,其中包含所有日期。 (或者至少有足够的日期来处理您的日期范围。)MariaDB(不是MySQL)具有序列表的简洁功能。例如,seq_1_to_100
是一个虚拟表,其中包含从1到100的所有整数。将类似的内容与+ INTERVAL seq
一起使用以生成所有日期。然后将LEFT JOIN
与我们的表一起获取“缺失”日期以生成NULL
值。如果需要,用0
将其更改为IFNULL()
。