表结构是这样的:
表1:
流量 路口 起始时间(varchar2) 结束时间 记录日期
17 G 00:00:00 00:05:00 2007-03-25
.. .. ...... ..... ......
20 A 03:30:00 03:34:30 2007-03-26
其中 流量是number型 其他都是varchar2类型(oracle数据库)
用adoquery1与dbchart1相连接。目标: 计算某一天的某一个路口每个小时的流量总计,dbchart上x坐标显示每个小时(00-23),y坐标显示每个小时的流量总计
能不能就用一个adoquery1就搞定这些啊????在线等!!!
表1:
流量 路口 起始时间(varchar2) 结束时间 记录日期
17 G 00:00:00 00:05:00 2007-03-25
.. .. ...... ..... ......
20 A 03:30:00 03:34:30 2007-03-26
其中 流量是number型 其他都是varchar2类型(oracle数据库)
用adoquery1与dbchart1相连接。目标: 计算某一天的某一个路口每个小时的流量总计,dbchart上x坐标显示每个小时(00-23),y坐标显示每个小时的流量总计
能不能就用一个adoquery1就搞定这些啊????在线等!!!
union all
ISNULL(SUM(CASE DATEPART(HOUR,日期) WHEN 2 THEN 流量 ELSE 0 END),0) AS 流量,'2点' as 时间 from table
union all
....
select sum(流量) as 流量,起始时间 from
(select 流量 from 表 where (起始时间 between(0,1)and (结束时间 between(0,1))
group by 起始时间
union all
select sum(流量) as 流量,起始时间 from
(select 流量 from 表 where (起始时间 between(1,2)and (结束时间 between(1,2))
group by 起始时间
union all
select sum(流量) as 流量,起始时间 from
(select 流量 from 表 where (起始时间 between(2,3)and (结束时间 between(2,3))
group by 起始时间
union all
select sum(流量) as 流量,起始时间 from
(select 流量 from 表 where (起始时间 between(3,4)and (结束时间 between(3,4))
group by 起始时间
.
.
.
select sum(流量) as 流量,起始时间 from
(select 流量 from 表 where (起始时间 between(23,24)and (结束时间 between(23,24))
group by 起始时间只是个思路,不知道成不成?
总感觉这样的sql语句写在adoquery中 是不是有点太长了???
有没有更好的思路???
你可以写成proc OR view OR functionps:用like也可以
计算 2007-12-16 一天,A路口
select DATEPART(HOUR,起始时间) as aHour,sum(流量) as Sum流量,count(*) from 表1
where 起始时间 between '2007-12-16' and '2007-12-17'
and 路口= 'A'
group by DATEPART(HOUR,起始时间) order by aHour
union all
ISNULL(SUM(CASE DATEPART(HOUR,日期) WHEN 2 THEN 流量 ELSE 0 END),0) AS 流量,'2点' as 时间 from table
union all 出来的还只是一条柱型
union all
ISNULL(SUM(CASE DATEPART(HOUR,日期) WHEN 2 THEN 流量 ELSE 0 END),0) AS 流量,'2点' as 时间 from table
union all 出来的还只是一条柱型
选择用曲线类型呀
但有个缺点就是如果表中没有某小时的记录,就不会出现这小时的统计了.你可以建一个表,插入0-23的数值,然后连接一下再group..CREATE TABLE hourlist (hour INT)
DECLARE @i INT
SET @i = 0
WHILE @i <= 23
INSERT INTO [hourlist] ([hour]) VALUES (@i)select DATEPART(HOUR,起始时间) as aHour,sum(流量) as Sum流量,count(*)
from 表1 a,hourlist h
WHERE
DATEPART(HOUR,a.起始时间)=h.hour
AND 起始时间 between '2007-12-16' and '2007-12-17'
and 路口= 'A'
group by DATEPART(HOUR,起始时间) order by aHour