表结构是这样的
uid 姓名 上班日期我想列出的是姓名 1月 2月 。12月    每月上班的天数,没有就用零表示还请sql高手指点一二,谢过先。
(我用的是员工id,所以重名的不用考虑)

解决方案 »

  1.   

    没有太好的理解 楼主的字段
    是uid对应是员工id
    还是姓名这个字段用id代替的不知道日期格式是什么格式  是 ‘2013-10-06’  还是‘20131006’
    具体对表数据也不是很了解建议创建临时表增加字段 ‘所属月份’ 可以是varchar型
    然后update  tmptable  set  ‘所属月份’= left(‘上班日期’,从左边数到第几位截取)(可以自己查看那一下left函数)
    然后直接使用  group  by   姓名 ,所属月份  就可以得到想要的数据不知道是不是正确理解楼主的意思了
      

  2.   

    如果楼主是做 程序 而不是单纯  用sql语句进行一次统计
    建议 楼主 更改一下表结构,这样子查询语句也更加便捷,迅速
    希望对楼主有帮助
      

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

  4.   

    可以不用管uid的,我的任务就是要做一个统计,日期格式随便,问题是能不能用一条复杂的sql做出来
      

  5.   

    在不用考虑效率的情况下可以这样查,不过格式与你期望的有一定出入:SELECT `name`, SUBSTR(time, 1, 7) as date, count(*) as sum FROM jobs GROUP BY `name`, date纵表转横标一直是个难题...
      

  6.   

    5楼的高手应该有些接近了,这个输出是几列?
    还有,如果本月没上班的话显示为null,不是0吧
      

  7.   

    怎么可能呢!按照姓名和日期分组,数据里面假如没有1月份的数据,那么查询出来的是不具有1月份的 表示的
    即 本月没上班  什么也没显示
    这种方法和上面我所说的没有差别
    上面主要是考虑,如果你写的是程序调用带函数的 sql语句 而且是全部查询可能效率地下点,所以建议增加字段,如果不采用增加字段,那么sql语句即5楼朋友所写的那样
    但是还是没有带着  你要求的那样子  本月没上班 显示为0能问一下楼主是用什么语言在写应用,还是什么吗!
      

  8.   

    确实
    ACMAIN_CHM 大大的那个帖子是很好的帮助
    赞一个
      

  9.   

    救命:
    SELEct 姓名,sum(if(month(上班日期)=1,1,0))
    as 1月,
    sum(if(month(上班日期)=2,1,0))
    as 2月,
    ...
    sum(if(month(上班日期)=12,1,0))
    as 12月 from tt group by 姓名