我有以下查询:
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
答案 0 :(得分:0)
解决这个问题的基本方法是:
MYTEST
)。确切的实现取决于您使用的数据库,但this question具有所有解决方案。
答案 1 :(得分: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行的第二个子查询中。根据数据库的不同,还有其他方法可以表达此查询,但方法通常是相同的:连接到数字表以获取其他行。