2

私は次のクエリを持っています:

SELECT 
  ROW_NUMBER () OVER (PARTITION BY a.jpnum, a.jptask 
                      ORDER BY a.jpnum, a.jptask) rn,  
  a.jpnum, 
  a.jptask, 
  REGEXP_SUBSTR (a.description, '[^,]+', 1, 3) col_3,  
  REGEXP_REPLACE (REGEXP_SUBSTR (a.description, 
                                 '[^,]+', 1, 3),  'C-.*' ) mytest  
FROM My.task a 
WHERE a.jpnum = '13788';

出力は次のとおりです。

RN  JPNUM  JPTASK  COL_3      MYTEST
1     13788  10            7C-4E SIG    7
1     13788  20            9C-6E SIG    9 

これまでのところ良いです...しかし、これが私が立ち往生しているものです。MYTESTの数と同じ回数だけ各行を繰り返す必要があります。だから...最初の2つを例に取ってみましょう。私は取得する必要があります:

RN  JPNUM   JPTASK  COL_3   MYTEST
---------------------------------------
1   13788   10   7C-4E SIG   7 
2   13788   10   7C-4E SIG   7 
3   13788   10   7C-4E SIG   7 
4   13788   10   7C-4E SIG   7 
5   13788   10   7C-4E SIG   7 
6   13788   10   7C-4E SIG   7 
7   13788   10   7C-4E SIG   7 
1   13788   20   9C-6E SIG   9 
2   13788   20   9C-6E SIG   9 
3   13788   20   9C-6E SIG   9 
4   13788   20   9C-6E SIG   9 
5   13788   20   9C-6E SIG   9 
6   13788   20   9C-6E SIG   9 
7   13788   20   9C-6E SIG   9 
8   13788   20   9C-6E SIG   9 
9   13788   20   9C-6E SIG   9 

私はこれらを何百も実行する必要があり、MYTESTは300に達する可能性があります

4

2 に答える 2

0

この問題への基本的なアプローチは次のとおりです。

  1. 少なくとも必要な最大繰り返し数と同じ数列を含むテーブルを生成します。
  2. シーケンステーブルの番号が<=繰り返したいもの(この場合MYTEST)であるシーケンステーブルに参加します。

正確な実装は、使用しているデータベースによって異なりますが、この質問にはすべての解決策があります。

于 2012-12-12T15:02:20.847 に答える
0

必要なのは、クエリを実行するための300までの数字のリストです。次に例を示します。

SELECT ROW_NUMBER () OVER (PARTITION BY a.jpnum, a.jptask 
                           ORDER BY a.jpnum, a.jptask) rn,
       jpnum, jptask, col_3, mytest
from (select a.jpnum, a.jptask, 
             REGEXP_SUBSTR (a.description, '[^,]+', 1, 3) col_3,  
             REGEXP_REPLACE (REGEXP_SUBSTR (a.description, 
                             '[^,]+', 1, 3),  'C-.*' ) mytest  
      FROM My.task a 
      WHERE a.jpnum = '13788'
    ) t join
    (select row_number() over (order by column_name) as num
     from Information_Schema.Columns
    ) numbers
    on numbers.num <= cast(mytest as int)

少なくとも300行ある2番目のサブクエリに任意のテーブルを配置できます。データベースに応じて、このクエリを表現する方法は他にもありますが、アプローチは同じであることがよくあります。数値のテーブルに結合して、追加の行を取得します。

于 2012-12-12T15:03:18.367 に答える