表结构如下所示:
CREATE TABLE [dbo].[T_QingJia](
[C_Id] [int] IDENTITY(1,1) NOT NULL,PRIMARY KEY--自动编号
[C_EmpName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,--员工姓名
[C_Time] [datetime] NULL,--打卡时间
[C_StartTime] [datetime] NULL,--开始时间
[C_EndTime] [datetime] NULL,--结束时间
[C_Type] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,--类型(病假,事假,调休等等)
[C_Hour] [numeric](18, 2) NULL --小时
记录如下所示:
1 | 张三 | 2011-3-3 14:07:20 | 2011-3-4 8:30:00 | 2011-3-4 18:00:00 | 事假 | 8.00 |
2 | 李四 | 2011-3-7 13:31:06 | 2011-3-9 8:30:00 | 2011-3-9 18:00:00 | 事假 | 8.00 |
3 | 王五 | 2011-2-21 9:32:54 | 2011-3-21 13:00:00 | 2011-3-21 18:00:00 | 事假 | 4.50 |
4 | 赵六 | 2011-3-25 9:46:17 | 2011-3-25 8:30:00 | 2011-3-25 12:00:00 | 事假 | 3.50 |
5 | 张三 | 2011-3-9 11:21:41 | 2011-3-8 8:30:00 | 2011-3-8 12:00:00 | 事假 | 3.50 |
6 | 李四 | 2011-3-19 13:27:22 | 2011-3-19 13:00:00 | 2011-3-19 17:00:00 | 事假 | 3.50 |
7 | 李四 | 2011-2-16 15:56:29 | 2011-3-16 17:00:00 | 2011-3-16 18:00:00 | 事假 | 1.00 |
8 | 王五? | 2011-3-17 8:46:55 | 2011-3-17 8:30:00 | 2011-3-17 12:00:00 | 事假 | 3.50 |
9 | 王五 | 2011-2-23 11:49:55 | 2011-3-23 8:30:00 | 2011-3-23 11:00:00 | 事假 | 2.50 |
要得去如下的统计结果:
Declare @Months nvarchar(200),@Sql nvarchar(500),@StartIndex int
Set @Months=''
Set @StartIndex=1
While(@StartIndex<=31)
Begin
Set @Months += '[' + REPLACE(STR(@StartIndex),' ','')+'],'
Set @StartIndex+=1
End
Set @Months=SUBSTRING(@Months,0,Len(@Months))
Set @Sql='
Select * From (
Select [C_EmpName],DATEPART(DAY,[C_StartTime]) as [Day],[C_Hour] From T_QingJia
) as a
Pivot (Max([C_Hour]) For [Day] In ('+@Months+'))
as b '
Exec(@Sql)
通过什么实现?通过查询分析器?