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 

到目前为止一切顺利......但这就是我坚持的。我需要每行重复与 MY TEST 中的数字一样多的次数。所以...以前两个为例。我需要得到:

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 行的任何表。根据数据库的不同,还有其他方法可以表达此查询,但方法通常是相同的:连接到数字表以获取额外的行。

于 2012-12-12T15:03:18.367 回答