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

sql語句橫向計數的問題
各位大哥們,小弟現在遇到一個难题,我的表的结构是这样的,
  D_FLG1 -- D_FLG24 NUMBER(10,0),
  DAT1 -- DAT24 NUMBER(10,0),
D_FLG1代表一个标记,DAT1代表数据,这个表存的是这二十四小时的数据,我现在需要计算比如从1点到10点的数据,需要把DAT1到DAT10数据累加起来除以10,
但是这个数据是要根据这个D_FLG标记来计算的,如果D_FLG标记这是一条无效的数据,那么不做为累加的数据。
举个例子,从一点到5点的数据,三点的数据无效,那么就应该是(DAT1+DAT2+0+DAT4+DAT5)/4,
请教各位如何在sql中实现这样的呢,谢谢各位了。

------解决方案--------------------
SQL code
select sum(DAT)/count(*) from (
  select D_FLG1 as D_FLG, DAT1 as DAT from table where ...
  union all
  select D_FLG2 as D_FLG, DAT2 as DAT from table where ...
  union all
  ...
)where D_FLG...

------解决方案--------------------
楼主参考一下:
SQL> select * from flag;

FLAG DATA
---------- ----------
2 100
2 100
2 100
2 100
1 100
2 105
2 105
1 100
1 100
2 100

已选择10行。

flag=2表示有效;
flag=1表示无效.
rownum是你要取的小时数,你也可以改为区间形式。

SQL> select sum(data*decode(flag,2,1,1,0,1))/sum(decode(flag,2,1,1,0,1)) result from flag where rownum<=4;

RESULT
----------
100

SQL> select sum(data*decode(flag,2,1,1,0,1))/sum(decode(flag,2,1,1,0,1)) result from flag where rownum<=7;

RESULT
----------
101.666667

SQL> select sum(data*decode(flag,2,1,1,0,1))/sum(decode(flag,2,1,1,0,1)) result from flag where rownum<=10;

RESULT
----------
101.428571