如何把"出勤表"的时间横放
工号 日期 时间
a 20070701 8:00
a 20070701 12:00
a 20070701 13:00
a 20070701 17:00
a 20070702 8:00
a 20070702 12:00
a 20070702 13:00
a 20070702 17:00
---如何生成以下记录
工号 日期 时间1 时间2 时间3 时间4
a 20070701 8:00 12:00 13:00 17:00
a 20070702 8:00 12:00 13:00 17:00
感谢!!!
[解决办法]
--创建测试环境
Create Table 表
(工号 Char(3),
日期 Varchar(10),
时间 Varchar(5))
Insert 表 Select 'a ', '20070701 ', '8:00 '
Union All Select 'a ', '20070701 ', '12:00 '
Union All Select 'a ', '20070701 ', '13:00 '
Union All Select 'a ', '20070701 ', '17:00 '
Union All Select 'a ', '20070702 ', '8:00 '
Union All Select 'a ', '20070702 ', '12:00 '
Union All Select 'a ', '20070702 ', '13:00 '
Union All Select 'a ', '20070702 ', '17:00 '
GO
--测试
If Object_ID( 'Tempdb..#T ') Is Not Null
Drop Table #T
Select ID = Identity(Int, 1, 1), * Into #T From 表 A
Declare @S Varchar(8000)
Select @S = 'Select 工号, 日期 '
Select @S = @S + ', Max(Case OrderID When ' + Cast(OrderID As Varchar) + ' Then 时间 Else ' ' ' ' End) As 时间 ' + Cast(OrderID As Varchar)
From (Select OrderID = (Select Count(工号) From #T Where 工号 = A.工号 And 日期 = A.日期 And ID <= A.ID), * From #T A) B Group By OrderID
Select @S = @S + ' From (Select OrderID = (Select Count(工号) From #T Where 工号 = A.工号 And 日期 = A.日期 And ID <= A.ID), * From #T A) B Group By 工号, 日期 '
EXEC(@S)
Drop Table #T
GO
--删除测试环境
Drop Table 表
--结果
/*
工号日期时间1时间2时间3时间4
a 200707018:0012:0013:0017:00
a 200707028:0012:0013:0017:00
*/