mysql - 将列值拆分为多个列值(生成学生出勤报告)

标签 mysql sql

我想将数据拆分为多列并更改列名,并根据拆分数据创建学生出勤率百分比。 现在我在数据库中的表受到打击...

----------------------------------------------------
StudentID | 11-4-2014 |12-4-2014|13-4-2014|14-4-2014
----------------------------------------------------
1             AA         AP         PP       PA
----------------------------------------------------
2             PP         AA         PP       AP
----------------------------------------------------

这里 A 代表缺席,P 代表现在。 AA 代表上午出勤和下午出勤。我们需要像这样分开..

根据日期和学生编号显示出勤率.. 在这里我使用 studentid 作为 1 和 11-4-2014

StudentID | Forenoon | Afternoon | Percentage 
---------------------------------------------
1              A          A           0%
--------------------------------------------
2              P          P          100%
-------------------------------------------

它应该基于从...到...的日期。 如果从日期 11.4.2014 到 13.4.2014 那么我们需要根据日期计算百分比。

提前致谢..

最佳答案

要回答您的问题,请引用以下内容

CREATE TABLE student (studentid INTEGER , attendanceDate VARCHAR(20));

我创建了一个表并在表中插入了以下数据

studentid  attendanceDate
---------  --------------
        1  AA            
        2  AP            
        3  PA            
        4  PP 

如果您将运行以下查询,您将获得所需的输出

SELECT T.studentid ,T.foreNoon,T.afterNoon, IF(T.forenoon=T.afternoon && T.forenoon ='A', '100%' ,
    IF(T.forenoon=T.afternoon && T.forenoon ='P' , '0%' ,'50%'))     AS percentage
 FROM (
 SELECT studentid, SUBSTRING(attendanceDate,1,1) AS foreNoon,SUBSTRING(attendanceDate,2,1) AS afterNoon  FROM student )T

如果您运行上面的查询,您将得到如下所示的输出

studentid  foreNoon  afterNoon  percentage
---------  --------  ---------  ----------
    1  A         A          100%      
    2  A         P          50%       
    3  P         A          50%       
    4  P         P          0%        

使用MYSQL的substring方式即可解决

关于mysql - 将列值拆分为多个列值(生成学生出勤报告),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23004264/

相关文章:

mysql - SQL查询,仅当列不为空时才选择,否则不选择

mysql - 在mysql中执行时忽略特定记录

php - 如何避免JS代码变成input?

php - Web 表单正在向数据库提交空白数据

MySQL n00b 的 MySQL 死锁之谜

MySQL 查询不太正确......可能很简单

SQL 查询获取顶行直到 ColName = 1

java - 我如何解决 PostgreSQL JDBC org.postgresql.util.PSQLException 错误 :

mysql - 使用SQL从仅在主表中具有id的不同表中获取名称?

php - Laravel 关系内部如何运作?