难倒一大片公司技术人员的SQL查询,求教达人!

(订单表Order)
订单号 订单状态
001 7
002 7
003 6
004 5
005 7
(订单状态1-7都有可能,默认为1)

(另外有改变订单表状态的日志表Log)
日志ID 订单号 状态 日期
1 001 5 2009.01.01 08:00
2 001 7 2009.01.01 15:00
3 002 3 2009.01.10 10:30
4 003 2 2009.01.01 16:00
5 002 5 2009.01.02 08:00
6 002 7 2009.01.02 20:00
7 003 3 2009.01.03 08:00
8 003 4 2009.01.03 10:00
9 003 5 2009.01.03 14:00
10 003 6 2009.01.04 09:00
11 003 7 2009.01.04 15:00

(最后想要得到这样的结果)
订单号 状态改变次数 第一次 第二次 第三次 第四次 第五次 第六次
001 2 5 7
002 3 3 5 7
003 6 2 3 4 5 6 7
004 0

005 0

(如果上面的列不好办的话,这样的结果也可以)
订单号 状态改变次数 状态变化
001 2 5,7
002 3 3,5,7
003 6 2,3,4,5,6,7
004 0

005 0

这样多行变为列的写法,有人会写么?

如果数据库版本为10G 可以这么写
[code="sql"]
select t1.id,count(t1.id) over(partition by t1.id) ,wmsys.wm_concat(t1.id) over(partition by t1.id order by t2.state) from order t1 ,log t2 where t1.id = t2.id
[/code]

看下这网址,应该和你的需求一样,不过比较麻烦。如果不是实时需要的话,还不如存储过程那。http://www.sql163.com/a/2010/0315/660290315.html