日期:2014-05-18  浏览次数:20399 次

请大家指点下。 谢谢
姓名 时差 类型 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分钟,求和后你再转化回来,我没有时间