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

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

帐号工作状态
1工作2012328
1工作2012329
2休息2012328
2休息2012329

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

帐号姓名工作休息
1张三20
2李四02
帐号姓名工作日期
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

转载于:https://www.cnblogs.com/zheyidetianshi/archive/2012/03/28/TableExchangeBySQL.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值