求一条行转列的SQL语句(和课程表的行转列有些不一样)

No4000 2013-06-07 11:07:00
数据表
ID, Project, YearMonth, WeekOrMonth
1 A 201306 第一周
2 A 201306 第二周
3 B 201306 第一周

查询结果
ID, Project, YearMonth, 第一周, 第二周, 第三周, 第四周, 月报
1 A 201306 以报 以报 未报 未报 未报
3 B 201306 以报 未报 未报 未报 未报

就是要显示一个月报表内容,请问这条SQL语句怎么写?
...全文
175 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxp642 2013-06-07
  • 打赏
  • 举报
回复
mysql> select project,yearmonth,if(sum(if(weekormonth='第一周',1,0)),'以报','未 报') as '第一周',if(sum(if(weekormonth='第二周',2,0)),'以报','未报') as '第二周',if(sum(if(weekormonth='第三周',3,0)),'以报','未报') as '第三周',if(sum(if(weekormonth='第四周',4,0)),'以报','未报') as '第四周' from tb group by project,yearmonth; +---------+-----------+-----------+-----------+-----------+-----------+ | project | yearmonth | 第一周 | 第二周 | 第三周 | 第四周 | +---------+-----------+-----------+-----------+-----------+-----------+ | A | 201306 | 以报 | 以报 | 未报 | 未报 | | B | 201306 | 以报 | 未报 | 未报 | 未报 | +---------+-----------+-----------+-----------+-----------+-----------+ 2 rows in set (0.00 sec)
WWWWA 2013-06-07
  • 打赏
  • 举报
回复
SELECT Project, YearMonth, IF(SUM(IF(WeekOrMonth='第一周',bz1,0))=1,'y','n'), IF(SUM(IF(WeekOrMonth='第二周',bz1,0))=1,'y','n'), IF(SUM(IF(WeekOrMonth='第三周',bz1,0))=1,'y','n'), IF(SUM(IF(WeekOrMonth='第四周',bz1,0))=1,'y','n'), IF(SUM(IF(WeekOrMonth='月报',bz1,0))=1,'y','n') FROM ( SELECT Project,YearMonth,WeekOrMonth,1 AS bz1 FROM ttl2 UNION ALL SELECT Project,'201306' AS rq,bz,0 AS bz1 FROM (SELECT DISTINCT a.`Project` FROM ttl2 a) a2,( SELECT '第一周' AS bz UNION SELECT '第二周' UNION SELECT '第三周' UNION SELECT '第四周' UNION SELECT '月报' ) a1) a2 GROUP BY Project, YearMonth
ACMAIN_CHM 2013-06-07
  • 打赏
  • 举报
回复
http://blog.csdn.net/acmain_chm/article/details/4283943 MySQL交叉表 在某些数据库中有交叉表,但在MySQL中却没有这个功能,但网上看到有不少朋友想找出一个解决方法,特发贴集思广义。http://topic.csdn.net/u/20090530/23/0b782674-4b0b-4cf5-bc1a-e8914aaee5ab.html?96198现整理解法如下:数据样本: create table tx( id int primary key, c1 c...

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧