表结构是这样的:
 表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.   

    select ISNULL(SUM(CASE DATEPART(HOUR,日期) WHEN 1 THEN 流量 ELSE 0 END),0) AS 流量,'1点' AS 时间from table
    union all
    ISNULL(SUM(CASE DATEPART(HOUR,日期) WHEN 2 THEN 流量 ELSE 0 END),0) AS 流量,'2点' as 时间 from table
    union all
    ....
      

  2.   


    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 起始时间只是个思路,不知道成不成?
      

  3.   


    总感觉这样的sql语句写在adoquery中 是不是有点太长了???
    有没有更好的思路???
      

  4.   

    (起始时间 like '00%')可以查到一小时内所有数据  :)
      

  5.   

    长无所谓
    你可以写成proc OR view OR functionps:用like也可以
      

  6.   

     计算某一天的某一个路口每个小时的流量总计 (以下一条记录是一个小时时间)
    计算 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
      

  7.   

    select ISNULL(SUM(CASE DATEPART(HOUR,日期) WHEN 1 THEN 流量 ELSE 0 END),0) AS 流量,'1点' AS 时间from table 
    union all 
    ISNULL(SUM(CASE DATEPART(HOUR,日期) WHEN 2 THEN 流量 ELSE 0 END),0) AS 流量,'2点' as 时间 from table 
    union all 出来的还只是一条柱型
      

  8.   

    select ISNULL(SUM(CASE DATEPART(HOUR,日期) WHEN 1 THEN 流量 ELSE 0 END),0) AS 流量,'1点' AS 时间from table  
    union all  
    ISNULL(SUM(CASE DATEPART(HOUR,日期) WHEN 2 THEN 流量 ELSE 0 END),0) AS 流量,'2点' as 时间 from table  
    union all  出来的还只是一条柱型
    选择用曲线类型呀
      

  9.   

    你可以用11楼的办法.
    但有个缺点就是如果表中没有某小时的记录,就不会出现这小时的统计了.你可以建一个表,插入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
      

  10.   

    我要在dbchart上显示一天24个小时的数据!!
      

  11.   

    呵呵 已经用group by分组解决这个问题了 只要一条语句 呵呵