我有下表(我的输入只有NIF、FILE和FILESIZE列).
我想通过以下规则获得列分区和子分区:
- 分区应该从1开始,并且每调整SUBPARTITION达到8就递增1.
- 单个NIF不能位于两个不同的分区中.(这实际上是最具限制性的条件).
- 每当文件大小中的运行总数达到10时,SUBPARTITION必须递增1.当SUBPARTITION递增1时,必须重置该运行总计.
生效日期:
NIF FILE FILESIZE PARTITION SUBPARTITION
----------------------------------------------
A C1 1 1 1
A C2 1 1 1
A C3 2 1 1
A C4 1 1 1
B C5 5 1 2
B C6 1 1 2
C C7 2 1 2
C C8 1 1 2
D C9 4 1 3
D C10 5 1 3
D C11 1 1 3
D C12 2 1 4
D C13 3 1 4
D C14 4 1 4
D C15 5 1 5
E C16 3 1 6
E C17 2 1 6
E C18 3 1 6
E C19 4 1 7
F C20 6 2 1
F C20 2 2 1
它不需要是单个查询,执行PSLQL游标也可以.
注意:这是创建输入表的代码.
DROP TABLE my_table;
-- Create the table
CREATE TABLE my_table (
NIF VARCHAR2(10),
FILE_ VARCHAR2(10),
FILESIZE NUMBER
);
-- Insert the input data
INSERT INTO my_table (NIF, FILE_, FILESIZE)
SELECT 'A', 'C1', 1 FROM DUAL UNION ALL
SELECT 'A', 'C2', 1 FROM DUAL UNION ALL
SELECT 'A', 'C3', 2 FROM DUAL UNION ALL
SELECT 'A', 'C4', 1 FROM DUAL UNION ALL
SELECT 'B', 'C5', 5 FROM DUAL UNION ALL
SELECT 'B', 'C6', 1 FROM DUAL UNION ALL
SELECT 'C', 'C7', 2 FROM DUAL UNION ALL
SELECT 'C', 'C8', 1 FROM DUAL UNION ALL
SELECT 'D', 'C9', 4 FROM DUAL UNION ALL
SELECT 'D', 'C10', 5 FROM DUAL UNION ALL
SELECT 'D', 'C11', 1 FROM DUAL UNION ALL
SELECT 'D', 'C12', 2 FROM DUAL UNION ALL
SELECT 'D', 'C13', 3 FROM DUAL UNION ALL
SELECT 'D', 'C14', 4 FROM DUAL UNION ALL
SELECT 'D', 'C15', 5 FROM DUAL UNION ALL
SELECT 'E', 'C16', 3 FROM DUAL UNION ALL
SELECT 'E', 'C17', 2 FROM DUAL UNION ALL
SELECT 'E', 'C18', 3 FROM DUAL UNION ALL
SELECT 'E', 'C19', 4 FROM DUAL UNION ALL
SELECT 'F', 'C20', 6 FROM DUAL UNION ALL
SELECT 'F', 'C21', 2 FROM DUAL;
COMMIT;