数据库的创建语句如下:
DROP TABLE "PERSON" CASCADE CONSTRAINTS;/*==============================================================*/
/* Table: "PERSON"                                              */
/*==============================================================*/
CREATE TABLE "PERSON"  (
   "ID"                 INT                             not null,
   "USERNAME"           varchar2(20)                    not null,
   "PASSWORD"           varchar2(20)                    not null,
   "REGISTERTIME"       DATE                            not null,
   constraint PK_PERSON primary key ("ID")
);
插入测试数据:
begin
   for k in 1..100 loop 
      insert into person(id,username,password,registertime) values('10010'||k,'abc'||k,'000000',to_date('2008-07-17 11:00:00','YYYY-MM-DD HH24:MI:SS'));
   end loop; 
end;
/
begin
   for k in 1..100 loop 
      insert into person(id,username,password,registertime) values('10011'||k,'abc'||k,'000000',to_date('2008-07-17 12:00:00','YYYY-MM-DD HH24:MI:SS'));
   end loop; 
end;
一个sql语句达到的效果如下:
注册时间  |0点-1点 |1点-2点 |3点-4点|~~~~~~~|23点-24点|--注册时间的时钟
---------------------------------------------------
20080401 |200    | 102    |  100 | ~~~~~~|   100   |--在时间段里注册的人数
注意:上面的结果只是其中的一种结果,也有另一种,因为时间段是自定义的。
也有可能是这样:
注册时间  |0点-4点 |4点-8点 |8点-12点|~~~~~~|20点-24点|--注册时间的时钟
-----------------------------------------------------
20080401 |302    | 205    |  100  | ~~~~~~|   300   |--在时间段里注册的人数
前段时间我问过一个类似的问题,只是不是动态输出,我现在需要动态输出,希望hebo2005再次帮助,谢谢!

解决方案 »

  1.   

    参考下这个吧,不定列的行列转换
    http://topic.csdn.net/u/20080416/11/910e40c1-60f1-441f-8b0f-19a969d30f77.html
      

  2.   

    如用存储过程,就完成可以用JAVA去动态生成SQL然后再执行了,我是新手还从来没有用过存储过程来生成过SQL,对存储过程的使用还不是很了解。我想要的是一条搞定。
    谢谢hebo2005的回复,不定列的行列转换要仔细学学才行
      

  3.   

    动态的一条SQL肯定搞不定的,只有固定列的才能用一条SQL搞定
    不定列的我自己也没写过,有空我也要测试下
      

  4.   

    像这种动态的行列转换,其实一般在前台用报表系统实现,比后台会好做许多,许多报表都有交叉表的功能
    这样你后台的SQL只要能取行纪录
    然后用交叉表做行列转换,会方便许多