两条合并一条,求最简单的解法
数据库的数据如下
STAMPDAY EmployeeCD stamptype stamptime
2007-02-28 2200399 1 08:02:00.000
2007-02-28 2200399 2 18:01:00.000
2007-03-01 2200399 1 08:08:00.000
(3 件処理されました)
这里stamptype 为1的是出勤 2的时候是退勤
我想得到数据如下
STAMPDAY EmployeeCD 出勤 退勤
2007-02-28 2200399 08:02 18:01
2007-03-01 2200399 08:08 null
我做了一个,能够实现,但是显示两条同样的数据,如下
STAMPDAY EmployeeCD 出勤 退勤
2007-02-28 2200399 08:02 18:01
2007-02-28 2200399 08:02 18:01
2007-03-01 2200399 08:08 null
经过处理可以实现一个,但是个人认为方法太笨,再次向各位高手求教其他方法
------解决方案-------------------- Select
STAMPDAY,
EmployeeCD,
Max(Case stamptype When 1 Then stamptime Else Null End) As 出勤,
Max(Case stamptype When 2 Then stamptime Else Null End) As 退勤
From TableName
Group By STAMPDAY,EmployeeCD
------解决方案--------------------Select
STAMPDAY,
EmployeeCD,
Max(Case stamptype When 1 Then CONVERT(varchar(8),stamptime) End) As 出勤,
Max(Case stamptype When 2 Then CONVERT(varchar(8),stamptime) End) As 退勤
From TEST
Group By STAMPDAY,EmployeeCD
--不用写else
------解决方案--------------------declare @t table
(
STAMPDAY varchar(10),EmployeeCD int,stamptype int,stamptime varchar(12)
)
insert @t select '2007-02-28 ', 2200399, 1 , '08:02:00.000 '
union all select '2007-02-28 ', 2200399, 2 , '18:01:00.000 '
union all select '2007-03-01 ', 2200399 , 1, '08:08:00.000 '
select t1.stampday,t1.employeecd,出勤=left(t1.stamptime,5),退勤=left(t2.stamptime,5) from
(select * from @t where stamptype=1) t1
full join
(select * from @t where stamptype=2) t2
on t1.stampday=t2.stampday
------解决方案-------------------- select 'STAMPDAY '= A.STAMPDAY,
A.EmployeeCD as EmployeeCD,
'出勤 '= A.stamptime,
'退勤 '= B.STAMPTIME
from stamp as A left join stamp as B on A.STAMPTYPE!=B.STAMPTYPE and A.STAMPDAY=B.STAMPDAY and A.EmployeeCD=B.EmployeeCD
WHERE A.Stamptype=1
------解决方案--------------------楼上实在是高
第一种可以实现
但是不知道max做起的作用 如果没有max然后就回出来两条
这个max的范围是什么?一EmployeeCD为范围的一个集合?
max其实没作用,你仔细看,case其实把数据选出来了。
但是 where后面有gruop by ,所以你选的内容要加上max,sum等这些函数
------解决方案--------------------恩 对头
gruop by ---要加上max,sum等这些函数 配合起来用就好了