首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么把"出勤表"的时间横放

2012-03-15 
如何把出勤表的时间横放工号日期时间a200707018:00a2007070112:00a2007070113:00a2007070117:00a2007070

如何把"出勤表"的时间横放
工号   日期             时间
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
*/

热点排行