这是第一次 - 我试图做这样的事情 - 所以请忍受我。 这是在MySql上。MySql - Sql查询或过程,通过将行转换为列来生成报告
我正在尝试生成报告,以查看哪些学生已完成哪些主题以及哪些日期。
这是我跑
select u.email,t.topic_name,tu.date_created as 'date completed' from topic_user tu join topic t ON tu.topic_id = t.topic_id join user u ON tu.user_id = u.user_id
它会返回结果一样
email | topic_name | date completed [email protected] | ABC | 03/01/2012 [email protected] | DEF | 03/02/2012 [email protected] | ABC | 03/08/2012 [email protected] | GHI | 03/08/2012 [email protected] | ABC | 03/02/2012 [email protected] | XYZ | 03/10/2012
我要生成的报告的方式,当前查询有主题名称为表头和日期他们完成它作为值
email | ABC | DEF | GHI | JKL | XYZ [email protected] | 03/08/2012 | 03/02/2012 | 03/08/2012 | null | null [email protected] | 03/02/2012 | null | null | null | 03/10/2012
几件事情要注意的是:
1)所有的主题名称将来自主题表 - 即使他们没有被学生们完成的 - 值应显示为空
2)柜面学生[email protected] - 他已经两次研究了ABC主题 - 但报告应该获得最新的日期。
我想我必须编写一个存储过程来完成此操作。就像可能首先从主题表中拉出所有主题名称,然后创建一个临时视图并填充它。
我希望你能提供任何帮助。 非常感谢
主题名称是否已修复?他们可以在SQL内硬编码?您是否保证每个电子邮件的主题名称只能有一个date_completed? – 2012-03-12 15:12:08
是主题名称在创建课程的意义上是固定的,主题表填充了名称。在需要时添加新的主题。没有,正如我所提到的,同一个学生可以多次研究同一个主题,但报告应该显示最后的日期。如果你看看[email protected]的学生 - 他已经完成了两次ABC课题,但报告显示了最后的日期。谢谢 – Gublooo 2012-03-12 15:44:23