2017-06-22 141 views
0

Helo,我需要根据数据值进行分组。当COl1中有100个时,将启动一个新组,并且需要填写Col2中的值。 有被另一列COL3订购(貌似有些序列..) 下面输出shown.I是甲骨文12C版本1Oracle按列中的数据值分组

COl1 Col2  Col3 
----- -----  ----- 
100  ABC inc. 1 
201  Z1   2 
201  Z2   3 
301  X1   4 
100  PQR inc. 5 
201  C1   6 
301  D1   7 
201  S1   8 
100  XYZ inc. 9 
201  D1   10 

Output : 

Col1  COl2 
----  ----- 
ABC inc. Z1 
ABC inc. Z2 
ABC inc. X1 
PQR inc. C1 
PQR inc. D1 
PQR inc. S1 
XYZ inc. D1 

感谢

+1

逻辑为您的分组并不清楚.. – scaisEdge

+1

对不起,我编辑的问题,增加了一些更详细 –

+0

我没有看到任何细节..你没有解释的逻辑分组.. – scaisEdge

回答

3

好了,现在有col3为序:统计每行最多出现col1 = 100。此计数可以用作组密钥。

with data as 
(
    select 
    col1, col2, col3, count(case when col1 = 100 then 1 end) over (order by col3) as grp 
    from mytable 
) 
select master.col2 as col1, slave.col2 as col2 
from (select * from data where col1 = 100) master 
join (select * from data where col1 <> 100) slave using(grp) 
order by grp, slave.col3; 
+0

这是一些甜蜜的SQL魔术:-) SQL测试自己动手。现在可以报废我的方法... –

+0

@ Thorsten-Kettner它的作品非常流畅!感谢您的及时帮助。非常感谢您。非常好。您所有的人都是主人,我从来没有意识到订单栏的重要性。我刚刚插上了您的解决方案,但会在晚上通过它来完全理解它。 –

+0

特别感谢所有其他参与者让我意识到我错过了什么!再次感谢! –