| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1275 人关注过本帖
标题:一个有挑战性的查询问题
取消只看楼主 加入收藏
gdzhan
Rank: 2
等 级:论坛游民
帖 子:90
专家分:14
注 册:2007-4-15
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:3 
一个有挑战性的查询问题
是这样的,一个考勤系统,每月出勤天数为22天,
如果有些员工出勤天数大于22天,比如25天,28天
我需要在这一个月当中查询出大于22天的并且出勤小时最少的那些天,请问SQL怎么写,

如果固定是多少天就好做,直接select top 3 * from table就出来了,
问题是这个top 3,这个3不是固定的,是个动态的数字,还有就是,我的环境里不能用存储过程的,只能用单条SQL
搜索更多相关主题的帖子: 挑战性 查询 
2010-08-03 14:48
gdzhan
Rank: 2
等 级:论坛游民
帖 子:90
专家分:14
注 册:2007-4-15
收藏
得分:0 
是二楼兄弟那样理解的,
我举个例子吧:
法定上班是22天的,,,,如果一个员这个月上了25天,那么就有3天是法定加班的,这三天的工资是算2倍的,,因为人家老板是想发少点工资吗,所以要在这25天中找出出勤小时最少的3天来算2倍的工资,(注意:这也不是定是3天,有可能人家出勤了28天,那么就有6天是算2倍加班的,也就是说要在这个月中找出出勤小时最少的那6天来算2倍工资的,3倍的话就不用这样做了,3倍的工资直接按国家规定的日期来做就可以,关健是算这个2倍的,所以有点难度,还得注意:是用SQL语句来写的,没有涉及到其它的软件开发语言,所以灵活性又缩小了)我之前以为可以这样做,但是行不通,如下:

2倍天数:= (实际出勤天数-22)
2倍天数=(case when 2倍天数>0 then 2倍天数 else 0 end)
2倍天数=select SUM(top (case when 2倍天数=1 then 1 when 2倍天数=2 then 2 when........ else 0 end))
我之前就是这样做,,代码大概就是这个写法的,,原因是top m,,,这个m是不能够那样获得的,只能用一个数字来做的,如,top 3,top 5 这样才可以的,

2010-08-03 21:17
gdzhan
Rank: 2
等 级:论坛游民
帖 子:90
专家分:14
注 册:2007-4-15
收藏
得分:0 
我的是SQL2000,,,不能通过,唉,真郁闷,,,

2010-08-04 13:06
gdzhan
Rank: 2
等 级:论坛游民
帖 子:90
专家分:14
注 册:2007-4-15
收藏
得分:0 
今天想了一下,,突然找到解决办法了:

select * from mytable where fdate not in (select top 22 fdate from mytable where fdate between d1 and d2 order by mynum desc)

先查下22天中最大的小时的记录,再用一个查询查这个月中不在这22天中的记录,就是最小的那几条了,,一下子明白了,搞这东西,搞得久了头会晕,
过几天又会头脑清了。

2010-08-04 15:04
快速回复:一个有挑战性的查询问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020667 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved