|
|
原帖由 myfriend2010 于 2008-3-14 14:18 发表 ![]()
with t (t1,t2,t3) as (
values
('A1', 1 ,'01'),('A1' ,1, '02'),('A1', 1, '03'),
('A2', 1, '01'),('A2', 2, '01'),('A2', 2 ,'02')
),
t1(t11,t22,t33,t44,t55) as (
select t1,t2,t3,rownumber() over(partition by t1,t2),rownumber() over(partition by t1,t2) as t4 from t
),
t3(s1,s2,s3,s4,s5) as(
select t11,t22,cast(t33 as varchar(100)),t44,t55 from t1 where T44 =1 and t55=1
union all
select a.s1,a.s2,cast(a.s3||'-'||b.t33 as varchar(100)),a.s4+1,a.s5 from t3 a,t1 b where a.s1=b.t11 and a.s2=b.t22 and a.s4 = b.t55-1
)
select s1,s2,s3 from t3 x where x.s4=(select max(s4) from t3 y where x.s1=y.s1 and x.s2=y.s2) order by s1,s2
;
------------------------------------
'A1' 1 '01-02-03'
'A2' 1 01
'A2' 2 '01-02'
如何保证顺序就是 '01-02-03' 而不是 '02-01-03' ?
rownumber() over(partition by t1,t2) 是不是应为 rownumber() over(partition by t1,t2 order by t3) |
|