在线SQL求助

昨天 2011-04-05 04:37:48
有一个上班打卡表数把以下

员工ID 员工姓名 日期打卡时间
1 李明 2011-3-1 8:00:00
2 陈红 2011-3-1 8:00:00
3 曾小 2011-3-1 8:00:00
4 黄好 2011-3-1 8:00:00
5 李健 2011-3-1 8:00:00
6 潘小 2011-3-1 8:00:00
7 罗明 2011-3-1 8:00:00
8 张代 2011-3-1 8:00:00
1 李明 2011-3-1 12:00::00
2 陈红 2011-3-1 12:00::00
3 曾小 2011-3-1 12:00::00
4 黄好 2011-3-1 12:00::00
5 李健 2011-3-1 12:00::00
6 潘小 2011-3-1 12:00::00
7 罗明 2011-3-1 12:00::00
8 张代 2011-3-1 12:00::00
现在想用SQL查询以下效果
员工ID 员工姓名 进入1 离开1 进入2 离开2 进入3 离开3 进入4 离开4
1 李明 2011-3-1 8:00:00 12:00::00
2 陈红 2011-3-1 8:00:00 12:00::00
3 曾小 2011-3-1 8:00:00 12:00::00
4 黄好 2011-3-1 8:00:00 12:00::00
5 李健 2011-3-1 8:00:00 12:00::00
6 潘小 2011-3-1 8:00:00 12:00::00
7 罗明 2011-3-1 8:00:00 12:00::00
8 张代 2011-3-1 8:00:00 12:00::00
数据1日期打卡时间是一列的 总共有六个打卡时间进入1,离开1,进入2,离开2
进入3,离开3,进入4,离开4
...全文
142 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rich_er 2011-04-05
  • 打赏
  • 举报
回复
现在2000的淘汰了, 2005的还跟得上。
昨天 2011-04-05
  • 打赏
  • 举报
回复
有没有用sql 2000写的。。代码都是2005
qgqch2008 2011-04-05
  • 打赏
  • 举报
回复
DECLARE @t TABLE (员工ID INT, 员工姓名 VARCHAR(20), 日期打卡时间 VARCHAR(50))
INSERT @t
SELECT 1, '李明', '2011-3-1 8:00:00' UNION ALL
SELECT 2, '陈红', '2011-3-1 8:00:00' UNION ALL
SELECT 3, '曾小', '2011-3-1 8:00:00' UNION ALL
SELECT 4, '黄好', '2011-3-1 8:00:00' UNION ALL
SELECT 5, '李健', '2011-3-1 8:00:00' UNION ALL
SELECT 6, '潘小', '2011-3-1 8:00:00' UNION ALL
SELECT 7, '罗明', '2011-3-1 8:00:00' UNION ALL
SELECT 8, '张代', '2011-3-1 8:00:00' UNION ALL
SELECT 1, '李明', '2011-3-1 12:00:00' UNION ALL
SELECT 2, '陈红', '2011-3-1 12:00:00' UNION ALL
SELECT 3, '曾小', '2011-3-1 12:00:00' UNION ALL
SELECT 4, '黄好', '2011-3-1 12:00:00' UNION ALL
SELECT 5, '李健', '2011-3-1 12:00:00' UNION ALL
SELECT 6, '潘小', '2011-3-1 12:00:00' UNION ALL
SELECT 7, '罗明', '2011-3-1 12:00:00' UNION ALL
SELECT 8, '张代', '2011-3-1 12:00:00';
WITH temp
AS ( SELECT 员工ID ,
员工姓名 ,
DATEDIFF(mi, '2010-1-1 00:00:00', 日期打卡时间) AS 日期打卡时间
FROM @t
),
temp1
AS ( SELECT TOP 100
*
FROM temp PIVOT ( MAX(日期打卡时间) FOR 日期打卡时间 IN ( [611040],
[611280] ) ) AS pvt
ORDER BY 员工ID
)
SELECT 员工ID ,
员工姓名 ,
DATEADD(mi, [611040], '2010-1-1 00:00:00') AS 进入1 ,
DATEADD(mi, [611280], '2010-1-1 00:00:00') AS 离开1
FROM temp1
员工ID 员工姓名 进入1 离开1
----------- -------------------- ----------------------- -----------------------
1 李明 2011-03-01 08:00:00.000 2011-03-01 12:00:00.000
2 陈红 2011-03-01 08:00:00.000 2011-03-01 12:00:00.000
3 曾小 2011-03-01 08:00:00.000 2011-03-01 12:00:00.000
4 黄好 2011-03-01 08:00:00.000 2011-03-01 12:00:00.000
5 李健 2011-03-01 08:00:00.000 2011-03-01 12:00:00.000
6 潘小 2011-03-01 08:00:00.000 2011-03-01 12:00:00.000
7 罗明 2011-03-01 08:00:00.000 2011-03-01 12:00:00.000
8 张代 2011-03-01 08:00:00.000 2011-03-01 12:00:00.000

(8 行受影响)


来个2005的,写得不好
javatemptation 2011-04-05
  • 打赏
  • 举报
回复
lz说:六个时间,那么应该是进入1,离开1,进入2,离开2,进入3,离开3 吧 ?


use tempdb;
/*
create table t1
(
员工ID int not null,
员工姓名 nvarchar(10) not null,
日期打卡时间 nvarchar(50) not null
);
insert into t1(员工ID,员工姓名,日期打卡时间)
values
(1,'李明','2011-3-1 8:00:00'),
(2,'陈红','2011-3-1 8:00:00'),
(3,'曾小','2011-3-1 8:00:00'),
(4,'黄好','2011-3-1 8:00:00'),
(5,'李健','2011-3-1 8:00:00'),
(6,'潘小','2011-3-1 8:00:00'),
(7,'罗明','2011-3-1 8:00:00'),
(8,'张代','2011-3-1 8:00:00'),
(1,'李明','2011-3-1 12:00::00'),
(2,'陈红','2011-3-1 12:00::00'),
(3,'曾小','2011-3-1 12:00::00'),
(4,'黄好','2011-3-1 12:00::00'),
(5,'李健','2011-3-1 12:00::00'),
(6,'潘小','2011-3-1 12:00::00'),
(7,'罗明','2011-3-1 12:00::00'),
(8,'张代','2011-3-1 12:00::00'),
(1,'李明','2011-3-1 13:00:00'),
(1,'李明','2011-3-1 14:00::00'),
(1,'李明','2011-3-1 15:00:00'),
(1,'李明','2011-3-1 17:00::00');
*/
select
t.员工ID,
t.员工姓名,
MAX(case when t.sortnum = 1 then t.日期打卡时间 end) as [进入1],
MAX(case when t.sortnum = 2 then t.日期打卡时间 end) as [离开1],
MAX(case when t.sortnum = 3 then t.日期打卡时间 end) as [进入2],
MAX(case when t.sortnum = 4 then t.日期打卡时间 end) as [离开2],
MAX(case when t.sortnum = 5 then t.日期打卡时间 end) as [进入3],
MAX(case when t.sortnum = 6 then t.日期打卡时间 end) as [离开3]
from
(
select
t1.员工ID,t1.员工姓名,
CAST(replace(t1.日期打卡时间,'::',':') as datetime) as [日期打卡时间],
ROW_NUMBER() over(partition by t1.员工ID,t1.员工姓名 order by CAST(replace(t1.日期打卡时间,'::',':') as datetime)) as [sortnum]
from t1
) as t
group by t.员工ID,t.员工姓名
order by t.员工ID;
昨天 2011-04-05
  • 打赏
  • 举报
回复
日期打卡时间 不是两个列是一个列

34,590

社区成员

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

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