日期:2014-05-17  浏览次数:20799 次

求一天中每小时的数据量-----这个SQL如何写,请牛人提供思路。
表A
      字段   A                                         B            
            2007-09-27   2:00             -3
            2007-09-27   4:00           200
            2007-09-27   4:00           -100
            2007-09-27   17:00           -4
如何写这个SQL?得到的结果在页面上显示为:A按小时排序,B、C空值补0,如果B、C有值,则B显示正数,C显示负数。
              A                                         B                             C  
            2007-09-27   1:00             0                             0
            2007-09-27   2:00             0                             -3
            2007-09-27   3:00             0                             0
            2007-09-27   4:00             200                         -100
            ........
            2007-09-27   24:00             0                                                           0

------解决方案--------------------
oracle 10g才能执行:
SELECT b.dd a, DECODE (aa.b, NULL, 0, aa.b) b, DECODE (aa.c,
NULL, 0,
aa.c
) c
FROM (SELECT TO_CHAR (TRUNC (a, 'hh24 '), 'yyyy-mm-dd hh24:mi:ss ') a,
SUM (DECODE (SIGN (b), -1, 0, b)) b,
SUM (DECODE (SIGN (b), -1, b, 0)) c
FROM a
GROUP BY TRUNC (a, 'hh24 ')) aa,
(SELECT TO_CHAR ( TRUNC (TO_DATE ( '2007-09-27 ', 'yyyy-mm-dd '))
+ (LEVEL - 1) / 24,
'yyyy-mm-dd hh24:mi:ss '
) dd
FROM DUAL
CONNECT BY LEVEL < 25) b
WHERE b.dd = aa.a(+)
order by b.dd