工时统计的sql练习--包含时间处理
//按月统计,除去周末的考勤,(工时,请假,缺勤)
--建表sql 创建[dbo].[AbsenceHourld]
CREATE TABLE [dbo].[AbsenceHourld](
[id] [int] NULL,
[date] [datetime] NULL,
[name] [varchar](50) NULL,
[hours] [int] NULL
) ON [PRIMARY]
--创建[dbo].[ManHour]
CREATE TABLE [dbo].[ManHour](
[id] [int] NULL,
[date] [datetime] NULL,
[name] [varchar](50) NULL,
[hours] [int] NULL
) ON [PRIMARY]
--建表sql
--统计所有员工-- 按天统计考勤数据
select a.name as 姓名,
CONVERT(varchar(100), a.[date] ,111) as 时间天,
sum(a.[hours])as 工作时间,
sum(isnull(b.[hours],0)) as 请假时间 ,
8-sum(a.[hours])+sum(isnull(b.[hours],0)) as 缺勤时间
from ManHour a
left join AbsenceHourld b
on a.name=b.name
where datepart(weekday, a.[date]) not in (6,7)
group by CONVERT(varchar(100), a.[date] ,111) ,a.name
-- 创建返回某月去掉周末的有效工时天数——函数
alter FUNCTION 返回减周末后月的天数(@date varchar(8))
RETURNS INT
AS
BEGIN
declare @fistM varchar(8) --月的第一天
declare @YY char(4),@MM char(2) --年,月
set @YY=LEFT(@date,4)
set @MM=dateadd(mm,1,@date) --这种截取会让月份是0开头
set @fistM=@YY+@MM+'01'
DECLARE @edate varchar(8),@monthCount INT ,@weekCount int --月的结束时间,月的天数,周末的天数
--取出月的天数 @monthCount
SET @edate =CONVERT(VARCHAR(8), dateadd(D,-1,@fistM),112)
SET @monthCount =CAST(datepart(day,@edate) AS INT)
--月的周末数 @weekCount
set @weekCount=0
declare @wdate varchar(8), @temp_time varchar(8),@WM varchar(6) --周计算(月)第一天,中间变量
set @WM=LEFT(@date,6)
set @wdate=@WM+'01'
set @temp_time=@wdate
while left(@wdate,6)=left(@temp_time,6)
begin
IF DATEPART(WEEKDAY,@temp_time)=1 OR DATEPART(WEEKDAY,@temp_time)=7 --第一天是星期几
set @weekCount=@weekCount+1
set @temp_time=convert(varchar(8),dateadd(D,1,@temp_time),112)
end
return @monthCount-@weekCount
END
select dbo.返回减周末后月的天数('20150105')
--统计所有员工 --月度考勤数据
select a.name as 姓名,
convert(char(4),year(a.[date]))+'年'+convert(char(2),month(a.[date]))+'月' as 时间,
sum(a.[hours])as 工作时间,
sum(isnull(b.[hours],0)) as 请假时间,
8*dbo.返回减周末后月的天数(CONVERT(varchar(12),min(a.[date]), 112 )) --调用函数取得
-sum(a.[hours])+sum(isnull(b.[hours],0)) as 缺勤时间
from ManHour a
left join AbsenceHourld b
on a.name=b.name
where datepart(weekday, a.[date]) not in (6,7)
group by month(a.[date]),a.name,year(a.[date])
工时统计的sql练习--包含时间处理的更多相关文章
- 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,
梁敬彬老师的<收获,不止SQL优化>,关于如何缩短SQL调优时间,给出了三个步骤, 1. 先获取有助调优的数据库整体信息 2. 快速获取SQL运行台前信息 3. 快速获取SQL关联幕后信息 ...
- SQL Server 取日期时间部分
在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate() 用DateName()就可以获得相应的年.月.日,然后再把它们连接起来就可以了: ...
- SQL导入txt以及SQL中的时间格式操作
原文:SQL导入txt以及SQL中的时间格式操作 MySQL中导入txt的指令为: load data local infile "路径名称" into table "表 ...
- SQL Server 取日期时间格式 日期与字符串之间的转换
SQL Server 取日期时间部分 在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate() 用DateName()就可以获得相应的 ...
- sql server获取时间格式
在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate() 用DateName()就可以获得相应的年.月.日,然后再把它们连接起来就可以了: ...
- SQL 时间范围和时间粒度
前言 使用 SQL 进行业务数据计算时,经常会遇到两个概念:时间范围 和 时间粒度 .以 最近一天的每小时的用户访问人数 为例: 最近一天 是时间范围 每小时 是时间粒度 常见的时间范围:最近五分钟. ...
- sql server日期时间转字符串
一.sql server日期时间函数Sql Server中的日期与时间函数 1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基 ...
- SQL Server日期时间格式转换字符串详解 (详询请加qq:2085920154)
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
- MS SQL Server带有时间的记录怎样查询
比如某一张表[A]有一个保存日期包含时间字段[B],如果以这个段[B]作查询条件对数据记录进行查询.也我们得花些心思才能查询到我们想得到的记录. 现在我们需要查询这天2014-06-21的所有记录: ...
随机推荐
- PPI是什么?如何计算?
PPI,英文全称:pixels per inch,即像素每英寸,也叫像素密度,它是描述在水平的和垂直的方向上,每英寸距离的图像包含的像素(pixel)数目.因此PPI数值越高,即代表显示屏能够以越高的 ...
- 有趣的TWinControl.RecreateWnd,并分析在哪些场合使用
CM_RECREATEWND = CM_BASE + 51; // TWinControl里有对应函数procedure CMRecreateWnd(var Message: TMessage); m ...
- c# 循环语句练习题;
1. 求100以内质数的和 2. 兔子问题 3. 九九乘法表: 一行一行打印: 4. 有一张超大的纸: 纸质的厚度是0.01: 对折多少次,可以达到珠峰的高度: 按照8848来计算: ...
- c# 基础连接已经关闭: 连接被意外关闭,错误的解决
原文:c# 基础连接已经关闭: 连接被意外关闭,错误的解决 调试一个使用HttpWebRequest模拟提交表单的程序的时候频繁出现上述错误提示,google了一下发现了几个解决方案.1.在appli ...
- Yii框架 多数据库、主从、读写分离
Yii是可以在配置文件里声明多个数据库连接,然后通过Yii::app()->db1,Yii::app()->db2...来访问它们,并且也实现了更高级(自动)的主从数据库功能. 最近因为一 ...
- 【HDOJ】4704 Sum
数学题.f(n) = 2^(n-1) mod (1e9+7). #include <cstdio> #define MAXN 100005 char buf[MAXN]; __int64 ...
- Linux企业级开发技术(4)——epoll企业级开发之epoll例程
为了使大家更加深入了解epoll模型在企业应用中的使用,下面给出一段基于epoll的服务器代码,并在代码中添加了详细注释: #include <deque> #include <ma ...
- 有关linux下redis overcommit_memory的问题(转)
一.背景 公司的redis有时background save db不成功,通过log发现下面的告警,很可能由它引起的: [13223] 17 Mar 13:18:02.207 # WARNING ov ...
- 在Win7下用XManager远程控制ubuntu
在Win7下用XManager远程控制ubuntu 远程主机通过xdmcp协议连接到ubuntu的图形终端,以图形终端方式登录. 远程主机是win7.ubuntu装在VMware虚拟机上,ubun ...
- [Locked] Inorder Successor in BST
Inorder Successor in BST Given a binary search tree and a node in it, find the in-order successor of ...