数据表
ID, Project, YearMonth, WeekOrMonth
1     A       201306     第一周
2     A       201306     第二周
3     B       201306     第一周查询结果
ID, Project, YearMonth, 第一周, 第二周, 第三周, 第四周, 月报
1     A       201306     以报    以报    未报    未报   未报
3     B       201306     以报    未报    未报    未报   未报就是要显示一个月报表内容,请问这条SQL语句怎么写?

解决方案 »

  1.   

    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
      

  2.   

    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)
      

  3.   

    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...