我需要在oracle中找到一个表列中缺失的数字,其中缺失的数字必须取100s,这意味着如果在2000年到2099年之间至少找到1个数字,那么2000年到2099年之间的所有缺失数字都必须是返回等等。
这是一个说明我需要什么的示例:
create table test1 ( a number(9,0));
insert into test1 values (2001);
insert into test1 values (2002);
insert into test1 values (2004);
insert into test1 values (2105);
insert into test1 values (3006);
insert into test1 values (9410);
commit;
结果必须是2000、2003、2005到2099、2100到2104、2106到2199、3000到3005、3007到3099、9400到9409、9411到9499。
我从这个查询开始,但它显然没有返回我需要的内容:
SELECT Level+(2000-1) FROM dual CONNECT BY LEVEL <= 9999
MINUS SELECT a FROM test1;
最佳答案
您可以按如下方式使用层次结构查询:
SQL> SELECT A FROM (
2 SELECT A + COLUMN_VALUE - 1 AS A
3 FROM ( SELECT DISTINCT TRUNC(A, - 2) A
4 FROM TEST_TABLE) T
5 CROSS JOIN TABLE ( CAST(MULTISET(
6 SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 100
7 ) AS SYS.ODCINUMBERLIST) ) LEVELS
8 )
9 MINUS
10 SELECT A FROM TEST_TABLE;
A
----------
2000
2003
2005
2006
2007
2008
2009
.....
.....
关于sql - oracle中如何将数字缺失100秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64711918/