【问题标题】:How to generate repeating numbers in sequence如何按顺序生成重复的数字
【发布时间】:2020-01-28 10:59:18
【问题描述】:

我想生成这个序列

col sequence 
  01 01
  01 02
  01 03 
  01 04
  01 05
  02 01
  02 02
  02 03
  02 04
  02 05
  ..
  ..
  12 01
  12 02
  12 03
  12 04
  12 04

并将其作为序列添加到另一个选择中。

【问题讨论】:

  • 您说“将其添加到选择中”。您确定生成带有序列的虚拟表是最好的解决方案吗?您也可以使用分析函数 row_number 来实现这一点 - 根本不需要加入另一个表。

标签: sql oracle with-statement rownum


【解决方案1】:

分层查询可能有助于产生您发布的结果:

SQL> with
  2  c1 as
  3    (select lpad(1 + level - 1, 2, '0') col1
  4     from dual
  5     connect by level <= 12
  6    ),
  7  c2 as
  8    (select lpad(1 + level - 1, 2, '0') col2
  9     from dual
 10     connect by level <= 5
 11    )
 12  select c1.col1, c2.col2
 13  from c1 cross join c2
 14  order by c1.col1, c2.col2;

CO CO
-- --
01 01
01 02
01 03
01 04
01 05
02 01
02 02
02 03
02 04
02 05
03 01
03 02
<snip>
11 04
11 05
12 01
12 02
12 03
12 04
12 05

60 rows selected.

SQL>

【讨论】:

  • 为什么要创建两个数字列表?一个就够了。
  • 因为第一列从 01 到 12,而对于每个第一列值,第二列从 01 到 05,@Gordon?
  • @Littlefoot 。 . . where 子句会处理这个问题。
【解决方案2】:

你想要row_numner()

select col, row_number() over (partition by col order by col) as sequence
from table t;

您可以使用子查询进行进一步操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多