这样的问题能不能用一条sql搞定

killwin 2013-10-06 09:29:56
表结构是这样的
uid 姓名 上班日期

我想列出的是

姓名 1月 2月 。。。。。。。12月 每月上班的天数,没有就用零表示

还请sql高手指点一二,谢过先。
(我用的是员工id,所以重名的不用考虑)
...全文
213 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kobe8free 2013-10-07
  • 打赏
  • 举报
回复
确实 ACMAIN_CHM 大大的那个帖子是很好的帮助 赞一个
kobe8free 2013-10-07
  • 打赏
  • 举报
回复
怎么可能呢!按照姓名和日期分组,数据里面假如没有1月份的数据,那么查询出来的是不具有1月份的 表示的 即 本月没上班 什么也没显示 这种方法和上面我所说的没有差别 上面主要是考虑,如果你写的是程序调用带函数的 sql语句 而且是全部查询可能效率地下点,所以建议增加字段,如果不采用增加字段,那么sql语句即5楼朋友所写的那样 但是还是没有带着 你要求的那样子 本月没上班 显示为0 能问一下楼主是用什么语言在写应用,还是什么吗!
wwwwb 2013-10-07
  • 打赏
  • 举报
回复
救命:
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 姓名

jsonbor 2013-10-06
  • 打赏
  • 举报
回复
wkellypro 2013-10-06
  • 打赏
  • 举报
回复
在不用考虑效率的情况下可以这样查,不过格式与你期望的有一定出入:

SELECT `name`, SUBSTR(time, 1, 7) as date, count(*) as sum FROM jobs GROUP BY `name`, date
纵表转横标一直是个难题...
killwin 2013-10-06
  • 打赏
  • 举报
回复
可以不用管uid的,我的任务就是要做一个统计,日期格式随便,问题是能不能用一条复杂的sql做出来
ACMAIN_CHM 2013-10-06
  • 打赏
  • 举报
回复
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...
kobe8free 2013-10-06
  • 打赏
  • 举报
回复
如果楼主是做 程序 而不是单纯 用sql语句进行一次统计 建议 楼主 更改一下表结构,这样子查询语句也更加便捷,迅速 希望对楼主有帮助
kobe8free 2013-10-06
  • 打赏
  • 举报
回复
没有太好的理解 楼主的字段 是uid对应是员工id 还是姓名这个字段用id代替的 不知道日期格式是什么格式 是 ‘2013-10-06’ 还是‘20131006’ 具体对表数据也不是很了解 建议创建临时表增加字段 ‘所属月份’ 可以是varchar型 然后update tmptable set ‘所属月份’= left(‘上班日期’,从左边数到第几位截取)(可以自己查看那一下left函数) 然后直接使用 group by 姓名 ,所属月份 就可以得到想要的数据 不知道是不是正确理解楼主的意思了
killwin 2013-10-06
  • 打赏
  • 举报
回复
5楼的高手应该有些接近了,这个输出是几列? 还有,如果本月没上班的话显示为null,不是0吧

56,940

社区成员

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

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