首页新闻找找看学习计划

(SQL语句)按姓名分组并按每个月的所有天数进行统计

0
悬赏园豆:20 [已解决问题] 解决于 2011-04-08 08:24

表结构如下所示:

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

要得去如下的统计结果:

问题补充: 3月份还有29号,30号,31号被漏掉了! 数据库是sql2005的,用sql代码实现!最好是存储过程实现!
booker zhou的主页 booker zhou | 初学一级 | 园豆:150
提问于:2011-04-07 16:57
< >
分享
最佳答案
0

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)

收获园豆:20
写代码的小2B | 老鸟四级 |园豆:4346 | 2011-04-07 17:53
谢谢大虾了!
booker zhou | 园豆:150 (初学一级) | 2011-04-07 21:47
其他回答(1)
0

通过什么实现?通过查询分析器?

死白的man | 园豆:2135 (老鸟四级) | 2011-04-07 17:01
这个表 让我想起了水晶报表的交叉表
支持(0) 反对(0) 死白的man | 园豆:2135 (老鸟四级) | 2011-04-07 17:02
用sql代码实现!最好是存储过程实现!
支持(0) 反对(0) booker zhou | 园豆:150 (初学一级) | 2011-04-07 17:04
sql2005的数据库
支持(0) 反对(0) booker zhou | 园豆:150 (初学一级) | 2011-04-07 17:05
显示在哪里?输出到哪里呢?就在查询分析器中查看吗? 还是在前台界面查看?
支持(0) 反对(0) 死白的man | 园豆:2135 (老鸟四级) | 2011-04-07 17:09
sql2005有个函数 pivot
支持(0) 反对(0) 死白的man | 园豆:2135 (老鸟四级) | 2011-04-07 17:15
只要在数据库里写出来执行达到上面的统计的结果就好了,到时候我会用代码去调用,然后返回datatable就可以了!
支持(0) 反对(0) booker zhou | 园豆:150 (初学一级) | 2011-04-07 17:30
pivot这个函数我试的过了的!
支持(0) 反对(0) booker zhou | 园豆:150 (初学一级) | 2011-04-07 17:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册