それはあなたが動的にパラメータを渡したい理由は明らかではない、と静的な表現としてそれを持っていない、EDITED
のようなもの:最初に私は、引数に直接サブクエリで数を有しましたNTILE()
になりますが、これは機能しません.Oracleの実装ではサポートされていません。
これは動作するはずです - SCOTTスキーマ内のEMP表でテストは:
select empno, ename,
ntile (ceil(ct/4)) over (partition by ct order by empno) as n_tile
from emp cross join (select count(*) as ct from emp);
EMPNO ENAME N_TILE
---------- ---------- ----------
7369 SMITH 1
7499 ALLEN 1
7521 WARD 1
7566 JONES 1
7654 MARTIN 2
7698 BLAKE 2
7782 CLARK 2
7788 SCOTT 2
7839 KING 3
7844 TURNER 3
7876 ADAMS 3
7900 JAMES 4
7902 FORD 4
7934 MILLER 4
14 rows selected
ので、基本表の行のカウントは別々に行われる必要がある、その後である(クロス結合を使用しますテーブルの1つに行が1つしかないため)。
ので:
select ..... , ntile (ceil(ct/25000)) over (partition by ct order by .....)
....
from <base_table> CROSS JOIN (select count(*) as ct from <base_table>)
NTILEは実際にあなたが望むものではないと思われます。既存のものは、任意の数のレコードを取り、同じサイズのチャンクの固定セットにグループ化することが全目的です。あなたの場合、25k行のサイズのチャンクの可変セットが必要です。 ROW_NUMBER()には式を使用してください。 'CEIL(ROW_NUMBER()OVER(ORDER BY id)/ 25000)' –