按天统计打卡时间

snlixing 2019-05-07 11:42:05
ID 员工ID 上班日期 上班打卡时间 下班打卡时间

1 1 2019-5-1 2019-5-1 07:45 2019-5-1 17:45
2 2 2019-5-1 2019-5-1 07:55 2019-5-1 17:42
3 3 2019-5-1 2019-5-1 07:49 2019-5-1 17:47
4 1 2019-5-2 2019-5-2 07:45 2019-5-1 17:45
5 2 2019-5-2 2019-5-2 18:55 2019-5-3 07:42


得到如下表:


员工ID 1 2 3 4 。。。。。。。。。。。31
1 07:45 07:45
17:45 17:45
2 07:55 18:55
17:42 07:42
3 07:49
17:47
...全文
83 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
q159846 2019-05-07
  • 打赏
  • 举报
回复
在with上一行后面加个分号SELECT '2','2019-5-2','2019-5-2 18:55','2019-5-3 07:42';
snlixing 2019-05-07
  • 打赏
  • 举报
回复
引用 1 楼 RINK_1 的回复:


IF OBJECT_ID(N'TEMPDB.DBO.#T') IS NOT NULL
DROP TABLE #T
GO

CREATE TABLE #T
(ID INT IDENTITY(1,1),
EMP_ID VARCHAR(5),
WORK_DATE DATETIME,
BEGIN_DATE DATETIME,
END_DATE DATETIME)

INSERT INTO #T
SELECT '1','2019-5-1','2019-5-1 07:45','2019-5-1 17:45' UNION ALL
SELECT '2','2019-5-1','2019-5-1 07:55','2019-5-1 17:42' UNION ALL
SELECT '3','2019-5-1','2019-5-1 07:49','2019-5-1 17:47' UNION ALL
SELECT '1','2019-5-2','2019-5-2 07:45','2019-5-2 17:45' UNION ALL
SELECT '2','2019-5-2','2019-5-2 18:55','2019-5-3 07:42'

WITH CTE
AS
(SELECT ID,EMP_ID,WORK_DATE,BEGIN_DATE,'IN' AS TYPE,DATEPART(D,WORK_DATE) AS WORK_DAY FROM #T
UNION ALL
SELECT ID,EMP_ID,WORK_DATE,END_DATE,'OUT' AS TYPE,DATEPART(D,WORK_DATE) AS WORK_DAY FROM #T)



SELECT CASE WHEN TYPE='IN' THEN EMP_ID ELSE '' END AS EMP_ID_NEW,TYPE,MAX(CONVERT(VARCHAR(5),CASE WHEN WORK_DAY=1 THEN BEGIN_DATE ELSE NULL END,108)) AS DAY_1,
MAX(CONVERT(VARCHAR(5),CASE WHEN WORK_DAY=2 THEN BEGIN_DATE ELSE NULL END,108)) AS DAY_2
FROM CTE
GROUP BY EMP_ID,TYPE
ORDER BY EMP_ID,TYPE


大神,有错误提示
消息 102,级别 15,状态 1,第 16 行
'CTE' 附近有语法错误。
RINK_1 2019-05-07
  • 打赏
  • 举报
回复


IF OBJECT_ID(N'TEMPDB.DBO.#T') IS NOT NULL
DROP TABLE #T
GO

CREATE TABLE #T
(ID INT IDENTITY(1,1),
 EMP_ID VARCHAR(5),
 WORK_DATE DATETIME,
 BEGIN_DATE DATETIME,
 END_DATE DATETIME)

INSERT INTO #T
SELECT '1','2019-5-1','2019-5-1 07:45','2019-5-1 17:45' UNION ALL
SELECT '2','2019-5-1','2019-5-1 07:55','2019-5-1 17:42' UNION ALL
SELECT '3','2019-5-1','2019-5-1 07:49','2019-5-1 17:47' UNION ALL
SELECT '1','2019-5-2','2019-5-2 07:45','2019-5-2 17:45' UNION ALL
SELECT '2','2019-5-2','2019-5-2 18:55','2019-5-3 07:42' 

WITH CTE
AS
(SELECT ID,EMP_ID,WORK_DATE,BEGIN_DATE,'IN' AS TYPE,DATEPART(D,WORK_DATE) AS WORK_DAY FROM #T
UNION ALL
SELECT ID,EMP_ID,WORK_DATE,END_DATE,'OUT' AS TYPE,DATEPART(D,WORK_DATE) AS WORK_DAY FROM #T)



SELECT CASE WHEN TYPE='IN' THEN EMP_ID ELSE '' END AS EMP_ID_NEW,TYPE,MAX(CONVERT(VARCHAR(5),CASE WHEN WORK_DAY=1 THEN BEGIN_DATE ELSE NULL END,108)) AS DAY_1,
MAX(CONVERT(VARCHAR(5),CASE WHEN WORK_DAY=2 THEN BEGIN_DATE ELSE NULL END,108)) AS DAY_2
FROM CTE
GROUP BY EMP_ID,TYPE
ORDER BY EMP_ID,TYPE

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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