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

请大家指点下。 多谢

2012-01-22 
请大家指点下。 谢谢姓名时差类型starttimeendtimeA1:01项目2007-05-012007-05-03A4:01项目2007-05-012007-

请大家指点下。 谢谢
姓名 时差 类型 starttime endtime  
A 1:01 项目 2007-05-01 2007-05-03
A 4:01 项目 2007-05-01 2007-05-02
A 3:23 学习 2007-05-01 2007-05-02
A 2:09 无关 2007-05-03 2007-05-04
A 5:14 无关 2007-05-01 2007-05-01
B 6:03 项目 2007-05-01 2007-05-01
B 2:21 无关 2007-05-01 2007-05-01
B 3:01 项目 2007-05-01 2007-05-03
B 4:55 无关 2007-05-01 2007-05-01


根据 上面的表 按类型 分类 查出 每一个人 在某一个日期段 所有时差的和
如 2007-05-01 至 2007-05-02 之间就是starttime>2007-05-01 endtime <2007-05-02

姓名 项目 学习 无关 
A 4:01 3:23 0
B 6:03 0 7:16


请大家帮忙看看。我不会写多类型的查询。2个类型的还可以..谢谢了



[解决办法]

SQL code
declare @sql varchar(8000)set @sql=''select @sql=@sql+',['+类型+']=max(case 类型 when '+类型+' then 时差 else ''0'' end)' from 表 gruop by 类型set @sql='select 姓名'+@sql+' from 表 where starttime>''2007-05-01'' endtime<''2007-05-02'' group by 姓名'exec(@sql)
[解决办法]
select
姓名,
项目=sum(case 类型 when '项目' then cast(left(时差,1) as int)*60 + cast(right(时差,2) as int ) else 0 end),
学习=sum(case 类型 when '学习' then cast(left(时差,1) as int)*60 + cast(right(时差,2) as int ) else 0 end),
无关=sum(case 类型 when '无关' then cast(left(时差,1) as int)*60 + cast(right(时差,2) as int ) else 0 end)
from tab1(表名) group by 姓名

cast(left(时差,1) as int)*60 + cast(right(时差,2) as int ) 是把时差转化为了分钟:例如1:01转化为61分钟,求和后你再转化回来,我没有时间

热点排行