这些数据都是在一个表中存在的,结构如下:
表名:tb1wDate datetime
wHour datetime
wMan  varchar语句:
select Count(wMan) from tb1 where wDate = '星期日' and wHour = '09:00'日期和时间我是通过参数据库传递的

解决方案 »

  1.   

    如果只有7天*7小时,那只有49条记录
    再慢也不会慢到哪里去
    就一条SQL
    用SP和SQL应该差不多
    我想应该是程序没写好
      

  2.   

    create proc p_qry
    @wDate datetime,
    @wHour datetime
    as
    declare @dt1 datetime,@dt2 datetime,@i int,@s nvarchar(4000)
    select @dt1=convert(char(10),@wDate,120)+' 07:00'
    ,@dt2=convert(char(10),@wDate,120)+' '+convert(varchar(5),@wHour,108)
    ,@wDate=@dt1,@s=''
    while @wDate<=@dt2
    select @s=@s+',['+convert(varchar(5),@wDate,108)
    +']=sum(case wHour when '''
    +convert(varchar(5),@wDate,108)
    +''' then 数量 else 0 end)'
    ,@wDate=dateadd(hour,@wDate,1)
    set @s='select 星期=wk'+@s+' from(
    select wk=datename(weekday,wDate)
    ,wHour=convert(char(5),wHour,108),数量
    from tb1 
    where wDate+wHour between @dt1 and @dt2
    )a group by wk'
    exec sp_executesql @s,N'@dt1 datetime,@dt2 datetime',@dt1,@dt2
    go--调用
    exec p_qry '2003-1-1','09:00'
      

  3.   

    --改改create proc p_qry
    @wDate datetime,
    @wHour datetime
    as
    declare @dt1 datetime,@dt2 datetime,@i int,@s nvarchar(4000)
    select @dt1=convert(char(10),@wDate,120)+' 07:00'
    ,@dt2=convert(char(10),@wDate,120)+' '+convert(varchar(5),@wHour,108)
    ,@wDate=@dt1,@s=''
    while @wDate<=@dt2
    select @s=@s+',['+convert(varchar(5),@wDate,108)
    +']=sum(case wHour when '''
    +convert(varchar(5),@wDate,108)
    +''' then 数量 else 0 end)'
    ,@wDate=dateadd(hour,1,@wDate)
    set @s='select 星期=wk'+@s+' from(
    select wk=datename(weekday,wDate)
    ,wHour=convert(char(5),wHour,108),数量
    from tb1 
    where wDate+wHour between @dt1 and @dt2
    )a group by wk'
    exec sp_executesql @s,N'@dt1 datetime,@dt2 datetime',@dt1,@dt2
    go--调用
    exec p_qry '2003-1-1','09:00'
      

  4.   

    出现以下错误:
    服务器: 消息 207,级别 16,状态 3,行 1
    列名 'wHour' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 '数量' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'wHour' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'wHour' 无效。
      

  5.   

    --测试--测试数据
    create table tb1(wDate datetime,wHour datetime,wMan int)
    insert tb1 select '2004-04-08','09:00:00',12
    union all select '2004-04-08','07:00:00',2
    union all select '2004-04-09','08:00:00',2
    union all select '2004-04-08','09:00:00',2
    go--处理的存储过程
    create proc p_qry
    @wDate datetime,
    @wHour datetime
    as
    declare @dt1 datetime,@dt2 datetime,@i int,@s nvarchar(4000)
    select @wDate=convert(char(10),@wDate,120)
    ,@wHour=convert(char(5),@wHour,108)
    ,@dt1=dateadd(day,1-datepart(weekday,@wDate),@wDate+'07:00')
    ,@dt2=@wDate+@wHour
    ,@s=''
    while @wHour>='07:00'
    select @s=',['+convert(varchar(5),@wHour,108)+']=sum(case wHour when '''
    +convert(varchar(5),@wHour,108)+''' then wMan else 0 end)'+@s
    ,@wHour=dateadd(hour,-1,@wHour)
    set @s='select 星期=''星期''+substring(''日一二三四五六'',a.wk,1)'+@s+' from(
    select wk=1 union all select 2 union all select 3 union all select 4
    union all select 5 union all select 6 union all select 7
    )a left join(
    select wk=datepart(weekday,wDate),wHour=convert(char(5),wHour,108),wMan
    from tb1 
    where wDate+wHour between @dt1 and @dt2
    )b on a.wk=b.wk 
    where a.wk<=datepart(weekday,@wDate)
    group by a.wk'
    exec sp_executesql @s,N'@dt1 datetime,@dt2 datetime,@wDate datetime',@dt1,@dt2,@wDate
    go--调用
    exec p_qry '2004-4-8','9:00'
    go--删除测试
    drop table tb1
    drop proc p_qry/*--测试结果
    星期     07:00       08:00       09:00       
    ------ ----------- ----------- ----------- 
    星期日    0           0           0
    星期一    0           0           0
    星期二    0           0           0
    星期三    0           0           0
    星期四    2           0           14(所影响的行数为 5 行)
    --*/