【问题标题】:Oracle Grouping by data value in a columnOracle 按列中的数据值分组
【发布时间】:2017-06-23 00:03:12
【问题描述】:

Helo,我需要根据数据值进行分组。当 COl1 中有 100 个时,一个新组开始,我需要从 Col2 填充值。 另一列 col3 有排序(看起来像一些序列..) 下面显示了输出。我使用的是 Oracle 12C 第 1 版

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

谢谢

【问题讨论】:

  • 你的分组逻辑不清楚..
  • 对不起,我正在编辑问题,添加更多细节
  • 我没有看到任何细节..你没有解释分组的逻辑..
  • 是的 .. 问题很清楚,但我无法在 sql 中为您提供帮助,这是不可能的 .. 您可以使用程序语言作为服务器端或触发器 ..
  • 还有其他栏目您没有向我们展示吗?您向我们展示的记录顺序的ORDER BY 子句是什么?

标签: sql oracle


【解决方案1】:

好的,现在订单有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;

【讨论】:

  • 那是一些甜蜜的 SQL 魔法 :-) 我自己在 SQL Fiddle 中测试过,它可以工作。现在可以放弃我的方法了...
  • @Thorsten-Kettner 它工作得非常顺利!!!感谢您的及时帮助。非常感谢。做得很好。你们都是高手,我从来没有意识到订单栏的重要性。我刚刚插入了你的解决方案,但晚上会通过它来完全理解它.
  • 特别感谢所有其他参与者让我意识到我错过了什么!再次感谢!
猜你喜欢
  • 2015-02-25
  • 2015-04-14
  • 1970-01-01
  • 2017-07-05
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
相关资源
最近更新 更多