在线SQL求助

昨天 2011-04-05 10:21: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 请用sql2000写代码
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
So_CooL 2011-04-06
  • 打赏
  • 举报
回复
select 员工ID, 员工姓名,(case when [日期打卡时间] = '8:00:00' then [日期打卡时间] else '' end) 进入1, (case when [日期打卡时间] = '12:00:00' then [日期打卡时间] else '' end)离开1, 进入2, 离开2 ,进入3, 离开3, 进入4 ,离开4
from 表
chuanzhang5687 2011-04-06
  • 打赏
  • 举报
回复
前人总结的太有用了
chuanzhang5687 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 maco_wang 的回复:]
SQL code

--合并列值
--原著:邹建
--改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-12-16 广东深圳

--表结构,数据如下:
/*
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
*/
--需要得到结果:
/*
id ……
[/Quote]我也想发这个
叶子 2011-04-05
  • 打赏
  • 举报
回复

--合并列值
--原著:邹建
--改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-12-16 广东深圳

--表结构,数据如下:
/*
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
*/
--需要得到结果:
/*
id values
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即:group by id, 求value 的和(字符串相加)
*/
--1. 旧的解决方法(在sql server 2000中只能用函数解决。)
--1. 创建处理函数
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

create function dbo.f_str(@id int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r = ''
select @r = @r + ',' + value from tb where id=@id
return stuff(@r, 1, 1, '')
end
go

-- 调用函数
SELECt id, value = dbo.f_str(id) FROM tb GROUP BY id

drop table tb
drop function dbo.f_str

/*
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
(所影响的行数为2 行)
*/

--2、另外一种函数.
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

--创建一个合并的函数
create function f_hb(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str = ''
select @str = @str + ',' + cast(value as varchar) from tb where id = @id
set @str = right(@str , len(@str) - 1)
return(@str)
End
go

--调用自定义函数得到结果:
select distinct id ,dbo.f_hb(id) as value from tb

drop table tb
drop function dbo.f_hb

/*
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
(所影响的行数为2 行)
*/


就是合并列值
xiongshao1943 2011-04-05
  • 打赏
  • 举报
回复
用自连接..............
表用a1,a2,a3,a4,a5,a6,a7,a8分别列出那几个时间,相关列用ID相关
希望对你有帮助
luofenghen 2011-04-05
  • 打赏
  • 举报
回复
看了下你另一个贴 2005 跟2000基本通用的 你执行下看看呗
luofenghen 2011-04-05
  • 打赏
  • 举报
回复
你这个数据的话 只能是那种 上班一次刷卡 下班一次刷卡的情况
用case when 判断

34,589

社区成员

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

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