工时统计的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的所有记录: ...
随机推荐
- MFC 如何改变对话框按钮上的文字
原文地址:http://blog.163.com/wenxianliang08@126/blog/static/8358326320110300643282/ 什么是标记菜单 如何标记菜单 如何 ...
- BZOJ 1087 互不侵犯
Description 在\(N \times N\)的棋盘里面放\(K\)个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共\(8 ...
- zip file 压缩文件
有时候我们希望 upload 文件后自动压缩, 可以节省空间. 可以使用微软提供的压缩代码 Install-Package System.IO.Compression.ZipFile -Version ...
- SHell命令总结
cat files-to-copy.txt | xargs -i cp {} /tmp
- VS2010中fatal error LNK1123错误的解决方案
问题描述: 在VS2010项目编译时会出现如下错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 解决方案: 查找是否有两个cvtres.exe ...
- GitHub上传不了的解决 ssh: connect to host github.com port 22: Bad file number git did not exit cleanly (exit code 128)
问题情况 本来一直用的是github的客户端,结果现在上传的时候出问题了,去网站上看,新项目已经创建,但是代码却怎么都上传不上去.于是只好用命令行的方式解决. Tortoisegit上是这样说的: g ...
- SRM 395(1-250pt)
DIV1 250pt 题意:在平面直角坐标系中,只能走到整点,每次有两种移动方法,可以沿平行于坐标轴方向走,也可以沿45度方向走,前者走一步耗时wt,后者走一步耗时st.比如从(x, y)可以走到(x ...
- Java Struts文件上传和下载详解
Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...
- 【OSGi】OSGi生命周期
1 生命周期管理 对于非模块化应用,生命周期将应用作为一个整体来操作: 而对于模块化应用,则可以以细粒度的方式来管理应用的某一个独立部分. OSGi生命周期管理 OSGi生命周期层有两种不同的作用: ...
- BASH_SOURCE 用法
参考 bash少见的用法 http://blog.csdn.net/wonderisland/article/details/22892759. 原有项目里自带的启动脚本用到了bash_source获 ...