sql 统计问题?

delphilrj 2010-09-07 08:46:06
姓名 ID 刷卡时间 类型
王恒 174 2010-09-01 19:12:32.000 下班1
王恒 174 2010-09-02 07:50:41.000 上班1
王恒 174 2010-09-02 18:27:04.000 下班1
王恒 174 2010-09-03 07:44:10.000 上班1
王恒 174 2010-09-04 08:44:04.000 迟到
王恒 174 2010-09-04 11:31:15.000 上班重复刷卡
王恒 174 2010-09-03 18:51:13.000 下班1

统计这个人在同一天有一次上班,一次下班,记工作天数1天,有迟到记迟到1次,只有上班没有下班记忘刷1次,只有下班没有上班也记忘刷1次,重复的不计
...全文
90 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
delphilrj 2010-09-08
  • 打赏
  • 举报
回复
学习!
delphilrj 2010-09-07
  • 打赏
  • 举报
回复
select 姓名,ID,刷卡日期=convert(varchar(10),刷卡时间,120)
,工作天数=(case when min(类型)!='迟到' and count(类型)=2 then 1 else 0 end)
,迟到=(case when min(类型)='迟到' then 1 else 0 end)
,忘刷次数=(case when (min(类型)='迟到' and count(类型)=2) or count(类型)=1 then 1 else 0 end)
from tb
where 类型 in ('上班1','下班1','迟到')
group by 姓名,ID,convert(varchar(10),刷卡时间,120)
min(类型)为什么要用min啊?
duanzhi1984 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 delphilrj 的回复:]
谢谢喜喜!
[/Quote]
。。。。
delphilrj 2010-09-07
  • 打赏
  • 举报
回复
谢谢喜喜!
lg200015017 2010-09-07
  • 打赏
  • 举报
回复
学习一下
喜-喜 2010-09-07
  • 打赏
  • 举报
回复
use test
go
if object_id('test.dbo.tb') is not null drop table tb
-- 创建数据表
create table tb
(
姓名 char(8),
ID int,
刷卡时间 datetime,
类型 varchar(20)
)
go
--插入测试数据
insert into tb select '王恒',174,'2010-09-01 19:12:32.000','下班1'
union all select '王恒',174,'2010-09-02 07:50:41.000','上班1'
union all select '王恒',174,'2010-09-02 18:27:04.000','下班1'
union all select '王恒',174,'2010-09-03 07:44:10.000','上班1'
union all select '王恒',174,'2010-09-04 08:44:04.000','迟到'
union all select '王恒',174,'2010-09-04 11:31:15.000','上班重复刷卡'
union all select '王恒',174,'2010-09-03 18:51:13.000','下班1'
go
--代码实现

select 姓名,ID,刷卡日期=convert(varchar(10),刷卡时间,120)
,工作天数=(case when min(类型)!='迟到' and count(类型)=2 then 1 else 0 end)
,迟到=(case when min(类型)='迟到' then 1 else 0 end)
,忘刷次数=(case when (min(类型)='迟到' and count(类型)=2) or count(类型)=1 then 1 else 0 end)
from tb
where 类型 in ('上班1','下班1','迟到')
group by 姓名,ID,convert(varchar(10),刷卡时间,120)

/*测试结果

姓名 ID 刷卡日期 工作天数 迟到 忘刷次数
--------------------------------------------------
王恒 174 2010-09-01 0 0 1
王恒 174 2010-09-02 1 0 0
王恒 174 2010-09-03 1 0 0
王恒 174 2010-09-04 0 1 1

(4 行受影响)
*/
lg200015017 2010-09-07
  • 打赏
  • 举报
回复
正好
chi到
shang班
xia班
这三个里面 chi到 按字母排最靠前。
很佩服 喜喜 的观察分析力

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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