这个存储过程怎么写啊??????????????????????????????????????????????????????

CodeProject-Jerry 2004-11-21 09:44:36
我想在存储过程中统计出表tTest中 从上午8点到下午6点里各小时的记录数

用伪代码描述一下:
int @hour = 8
while( @hour < 19 )
{
SELECT COUNT(*) From tTest WHERE Hour=@hour
}


然后在上面的循环中把得到的各个小时的COUNT(*)结果分别保存到下面的变量中:
DECLARE @hour8 int,
@hour9 int,
@hour10 int,
@hour11 int,
@hour12 int,
@hour13 int,
@hour14 int,
@hour15 int,
@hour16 int,
@hour17 int,
@hour18 int

最后我想用这种方式输出:
SELECT @hour8 ,@hour9 ,@hour10 ,@hour11 ,@hour12 ,@hour13 ……,@hour18
AS
'8','9','10','11','12','13'……,'18'

可是我在写的时候才发现,真的好难,不知道这个存储过程应该怎么写才算好,SQL里面没有数组,我应该怎么解决这个问题??

...全文
199 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilons1 2004-11-23
  • 打赏
  • 举报
回复
何必用变量呢
select H = hour , CNT = count(*) into #1` from table group by hour
要取你再取好了
select @Hx = cnt from #1 where h = x
lxd99423 2004-11-23
  • 打赏
  • 举报
回复
--也可以使用拼字符串的方法
declare @hour int,@sql varchar(8000)
select @hour = 8,@sql='select
'
while @hour < 19
begin
select @sql=@sql+'['+cast(@hour as varchar(10))+
']=sum(case when Hour='+cast(@hour as varchar(10))+' then 1 else 0 end),
',@hour=@hour+1
end
set @sql=left(@sql,len(@sql)-3)+' from tTest'

--
print @sql
--
exec(@sql)

--结果
/*
select
[8]=sum(case when Hour=8 then 1 else 0 end),
[9]=sum(case when Hour=9 then 1 else 0 end),
[10]=sum(case when Hour=10 then 1 else 0 end),
[11]=sum(case when Hour=11 then 1 else 0 end),
[12]=sum(case when Hour=12 then 1 else 0 end),
[13]=sum(case when Hour=13 then 1 else 0 end),
[14]=sum(case when Hour=14 then 1 else 0 end),
[15]=sum(case when Hour=15 then 1 else 0 end),
[16]=sum(case when Hour=16 then 1 else 0 end),
[17]=sum(case when Hour=17 then 1 else 0 end),
[18]=sum(case when Hour=18 then 1 else 0 end) from tTest
*/
guanshiyu123 2004-11-22
  • 打赏
  • 举报
回复
这要看你的表中字段是否听话了,要是听话的以上这些办法都行,不听话,就得转了
qizhanfeng 2004-11-22
  • 打赏
  • 举报
回复
up
greatProject 2004-11-22
  • 打赏
  • 举报
回复
select B.itemName, sum(B.recordCount) As total
From
(select itemName, recordCount = 1
from A) AS B
group by B.itemName
lanbaibai 2004-11-21
  • 打赏
  • 举报
回复
select count(*) from t where 时间between 今天上午8点 and 今天下午6点 group by substring(str(时间),11,2)
Yang_ 2004-11-21
  • 打赏
  • 举报
回复
不用这样

select sum(case when Hour=8 then 1 else 0 end) as [8],
sum(case when Hour=9 then 1 else 0 end) as [9],
...
sum(case when Hour=18 then 1 else 0 end) as [18]
from tTest
where Hour between 8 and 18

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧