转换数据库中某些字段的类型(CAST)

数据库中设计了一个人员状态表,如下表所示:

帐号 工作状态
1 工作 2012 3 28
1 工作 2012 3 29
2 休息 2012 3 28
2 休息 2012 3 29

我现在想要做的是,统计每个帐号在一段时间内的工作天数,以及详细显示该帐号的工作时间(具体要得到的内容如下面两张表)

帐号 姓名 工作 休息
1 张三 2 0
2 李四 0 2
帐号 姓名 工作日期
1 张三 2012/3/28
1 张三 2012/3/29

怎样通过上面一张表得到下面的两张表呢?

根据这个语句我们可以组合成查询语句中的where条件语句:CAST( (CAST(Year as nvarchar) + '-' + CAST(Months as nvarchar) + '-' + CAST(Days as nvarchar) + ' 00:00')  AS DateTime)

where CAST( (CAST(Year as nvarchar) + '-' + CAST(Months as nvarchar) + '-' + CAST(Days as nvarchar) + ' 00:00')  AS DateTime) >= '2012/3/28'

and CAST( (CAST(Year as nvarchar) + '-' + CAST(Months as nvarchar) + '-' + CAST(Days as nvarchar) + ' 00:00')  AS DateTime) <= '2012/3/29'

统计状态天数的语句: count((case state when 工作 then  1 end)) as 工作 

只要将这两句话灵活的组合在一起,就可以完成上面三个表格之间的转换:另外还有一句:

ISNULL((select b.State from TKY_EmployeeState b where b.EmployeeCode=s.EmployeeCode AND b.Year=DATEPART(YEAR, '2012/3/29')
and b.Months=DATEPART(MONTH, '2012/3/29') and b.Days=DATEPART(DAY, '2012/3/29'),'') AS a

posted on 2012-03-28 10:40  折翼的天使  阅读(562)  评论(0编辑  收藏  举报