mysql - 在动态数据透视表上添加另一列并计算 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 值。
请帮忙。
解决方案
您需要一个包含所有日期的单独表格。(或者至少有足够的日期来处理您的日期范围。) MariaDB(不是 MySQL)具有序列表的简洁功能。例如,seq_1_to_100
是一个包含从 1 到 100 的所有整数的虚拟表。使用类似的东西,连同+ INTERVAL seq
生成所有日期。然后LEFT JOIN
用我们的表来获取“缺失”的日期来生成NULL
值。如果需要,将它们更改为0
with 。IFNULL()
推荐阅读
- javascript - 将 team-js 导入 Vue.js 文件
- python - 如何以随机顺序使用多个列表但每次都匹配
- ubuntu-18.04 - 在 Ubuntu 18.04 上安装 python-poppler-qt4
- arm - 为什么 Eclipse CDT Indexer 不索引正确的配置?
- java - 从请求中获取 Keycloak auth-server-url?
- c++ - 当仅影响静态方法时,如何解决 C++ 中的链接器错误?
- gitlab - 时间:一些分支机构的手册
- r - 如何在 R 统计中结合两个函数?
- android - 在 Android Studio 中使用 Kotlin 构建一个简单的 MediaPlayer。无法获取要流式传输的 URL 数据源
- visual-studio - I'm getting a package Microsoft.Build 16.3.0 is not compatible with netstandard 2.0 error