MySQL 将多行合并为一行

MySQL combining multiple rows into one row

我有如下两个表格:
1. tbl_student:

id  name
1   raj
2   raja
3   raju
4   rajan
  1. tbl_attendance

     id student_id month attended_days
      1          1     1             6
      2          1     2            16
      3          8     1             8
      4          7     2            14
      5          8     2            13
      6          7     1            11
    

我需要将这两个表合并 tbl_attendance 每个学生每个月的多行合并成一行以获得如下结果:

 id     name    month   attended_days   month   attended_days
  1     raj         1               6       2              16
  7     raja        1              11       2              14
  8     rajan       1               8       2              13

在此先感谢您的帮助。

不是在每条记录中显示月份值,
您可以将它们用作 headers 列,并将出勤率用作它们的值。

使用pivot类型的解决方案来实现所需的解决方案。

示例

select s.id as student_id
     , s.name as student_name
     , max( case when a.month = 1 then a.attended_days else null end ) as month_1
     , max( case when a.month = 2 then a.attended_days else null end ) as month_2
     , max( case when a.month = 3 then a.attended_days else null end ) as month_3
--     ...
     , max( case when a.month = 12 then a.attended_days else null end ) as month_12
  from table_student s
  left join table_attendance a on s.id = a.student_id
 group by s.id, s.name

你的问题不是很完整,但我想你想要这样的东西:

 select s.*, 
    coalesce(a1.month, a2.month, a3.month) as month,
    coalesce(a1.attended_days , a2.attended_days , a3.attended_days ) as attended_days 
     from table_student s
      left join table_attendance a1 on s.id = a1.student_id and a1.month = 1
      left join table_attendance a2 on s.id = a2.student_id and a2.month = 2
      left join table_attendance a3 on s.id = a3.student_id and a3.month = 3

如果您想在一列中显示所有月份,则使用前面的代码。对于多列,您可以使用此示例:

  select s.*, 
    a1.month as month_1, 
    a2.month as month_2,
    a3.month  as month_3,
    a1.attended_days as attended_days_1, 
    a2.attended_days as attended_days_2, 
    a3.attended_days as attended_days_3  
     from table_student s
      left join table_attendance a1 on s.id = a1.student_id and a1.month = 1
      left join table_attendance a2 on s.id = a2.student_id and a2.month = 2
      left join table_attendance a3 on s.id = a3.student_id and a3.month = 3

在所有 12 个月内都这样做。我以3为例。