问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql 单表查询语句 求高手帮忙

发布网友 发布时间:2022-04-08 19:49

我来回答

5个回答

热心网友 时间:2022-04-08 21:18

--总出席的天数
DECLARE @day_count int
select @day_count=count(*) from
(select substring(convert( varchar(10),signtime,120),1,10) a from sign group by substring(convert( varchar(10),signtime,120),1,10)) s;

--考勤表中出现的人
select m1.userid,m1.应考天数,m2.签到次数,m3.签退次数,ISNULL(m4.迟到次数,0) 迟到次数,ISNULL(m5.早退次数,0) 早退次数 from (
select userid,@day_count 应考天数 from sign group by userid) m1 left join (
--每人签到的次数
select count(signid) 签到次数, userid from sign where signflag=1 group by userid ) m2 on m1.userid=m2.userid left join(
--每人签退的次数
select count(signid) 签退次数, userid from sign where signflag=0 group by userid ) m3 on m1.userid=m3.userid left join (
--每人迟到次数
select count(signid) 迟到次数, userid from sign where signflag=1 and convert(varchar(5) ,signtime,114)>'08:00' group by userid ) m4 on m1.userid=m4.userid left join (
--每人早退次数
select count(signid) 早退次数, userid from sign where signflag=0 and convert(varchar(5) ,signtime,114)<'18:00' group by userid) m5 on m1.userid=m5.userid

--把这些语句再用left join 连在一起想要啥就有啥了,都到这步了计算你自己来吧

热心网友 时间:2022-04-08 22:36

假设8点上班,18点下班。
出勤是指有签到,而旷工是指签退;
迟到的定义是指8点以后签到;
早退的定义是指18点以前签退;
另外,以下情况不作考虑:
输入的开始时间 < 结束时间
不考虑节假日,不考虑重名,

WITH cte_S([userId],[signTime],[mark]) AS (
SELECT [userId],[signTime],[mark]
FROM [Sign]
WHERE [signTime] BETWEEN @DateBegin AND @DateEnd
AND (DATEPART(DW,[signTime]) BETWEEN 2 AND 6)
)
SELECT DISTINCT [userId],
(SELECT COUNT(*)
FROM cte_S
WHERE ([userId] = tblM.[userId])
AND ([mark] = 1)
) AS [出勤率],
(SELECT COUNT(*)
FROM cte_S
WHERE ([userId] = tblM.[userId])
AND ([mark] = 1)
AND (DATEPART(HH,[signTime]) > 8)
) AS [迟到次数],
(SELECT COUNT(*)
FROM cte_S
WHERE ([userId] = tblM.[userId])
AND ([mark] = 0)
AND (DATEPART(HH,[signTime]) < 17)
) AS [早退次数],
(SELECT (DATEPART(WK,@DateEnd) - DATEPART(WK,@DateBegin)) * 5 + CASE
WHEN (DATEPART(DW,@DateBegin) < DATEPART(DW,@DateEnd))
THEN (DATEPART(DW,@DateEnd) - DATEPART(DW,@DateBegin) + 1)
ELSE
0 - (DATEPART(DW,@DateBegin) - DATEPART(DW,@DateEnd)) + 1
END
-
COUNT(*)
FROM cte_S
WHERE ([userId] = tblM.[userId])
AND ([mark] = 1)
) AS [旷工次数]
FROM [Sign] AS tblM

这个比较接近800个字符了,你再去掉些可有可无的关键字………
如果你可以再写一个函数的话,你可以把Case那段写在函数里。

热心网友 时间:2022-04-09 00:11

这个有点复杂,建议你在表中加一个状态的列,用于存放当天是早退,迟到,还是正常上班,就像签卡那一列一样,这样写出来就简单了

热心网友 时间:2022-04-09 02:02

我只能说很简单。

热心网友 时间:2022-04-09 04:10

楼上的答案 很占屏幕
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大同四区和市区的区别 大同云冈属于哪里 大同市云冈区建成区范围都有哪些 it wasn't long before i found a job.---before是什么意思 It wasn't long before a man from It wasn't long before和It won't be long before有什么区别吗? it wasn't long before和it won't be long before有什么不同?_百度知 ... 微信怎么查和一个好友的红包记录 马龙巴黎奥运会夺冠了吗 明天是中国的情人节??? 无风险利率上涨 看跌期权价值将会上升还是下降,为什么 无风险利率降低,资本成本怎么变 为什么无风险报酬率降低会导致资本成本也降低? 期货 无风险利率下降时 为何无风险利率下降时,认沽证价格趋跌? 2022无风险利率是多少 小米体脂称好用吗 病毒营销是怎么操作的? 怎么做病毒营销? 小米体脂秤体脂28以上标准? “病毒”营销的界限是什么呢? 病毒营销有哪些战略要素?其传播策略有哪些? 注销之后手机号可以重新注册吗 暗黑2的仇恨值是怎么算的 求个暗黑2 单机能bugmf的补丁 只要单机bugmf的 其他什么都不要 - 信息提示 暗黑2 BOSS杀死后 如何健康有效的进行网络公关活动 暗黑破坏神2第一幕的(杀了安达利雨后不退出,直接在本游戏到达cat2,以后建入游戏安达利雨就是BUG mf) 暗黑2杀地狱安姐10次了,全是药水什么情况。players1到4,mf300 泰迪可以吃猪肉吗 苹果8卡贴机 换卡的话有什么不良反应 微信注销后绑定的手机号多久可以重新绑定另一个? 怎样才能让一个鸡蛋冲10米高的地方掉下来不会破呢? 鸡蛋从高空扔下来有什么办法不破?? 微信注销后,手机号多长时间可以再次绑定? 怎么编放鸡蛋的绳子 鸡蛋从二楼扔下去、怎么样不会破、? 过生日把鸡蛋外面是染成深红色的,还用一个网兜装着挂在自己胸前。这是什么地方风俗? - 信息提示 注销之后手机号可以重新注册吗 番石榴鲜榨果汁配方是什么? iopeBB霜C21与N21有什么区别 赫拉bb霜c21和c23有什么区别 芭乐怎么榨汁 海蓝之谜眼霜C21什么意思? 怎么在微信群隐身抢红包 hera气垫bb霜c21上面是生产日期还是过期日期? 微信群如何抢自己发的红包 兰芝气垫bb霜C21跟赫拉C21一样吗