在 Oracle 中生成具有增量值的重复行
Generate duplicate rows with incremental values in Oracle
我在 Oracle SQL 中有一个要求,即特定值应重复 5 次。所以,我编写了以下查询并得到了预期的结果。
SELECT Item_Name || RANGES AS Item_Number
FROM
(
SELECT DISTINCT 'Price Line ' || column1 || '-' AS Item_Name, level+0 RANGES
FROM
(
SELECT DISTINCT column1 from tbl where column1 in
(
'ABC',
'BCD'
)
) connect by level <= 5
) order by Item_Number
OUTPUT:
Price Line ABC-1
Price Line ABC-2
Price Line ABC-3
Price Line ABC-4
Price Line ABC-5
Price Line BCD-1
Price Line BCD-2
Price Line BCD-3
Price Line BCD-4
Price Line BCD-5
但是当我添加超过 10 个值时,如 'DEF'、'EFG'、.....'XYZ',查询会持续执行数小时而没有任何结果。
如有任何帮助或建议,我们将不胜感激。
此致,
确保 CONNECT BY
未在您的 table 行上运行。例如,使用常见的 table 表达式(即 WITH
子句)使用 CONNECT BY
创建一个包含 5 行的行源,然后 CROSS JOIN
该行源到您的 table。这是一个例子。
CREATE TABLE ITEMS ( item_number VARCHAR2(30) );
INSERT INTO ITEMS VALUES ('ABC');
INSERT INTO ITEMS VALUES ('BCD');
INSERT INTO ITEMS VALUES ('CDE');
INSERT INTO ITEMS VALUES ('DEF');
INSERT INTO ITEMS VALUES ('EFG');
INSERT INTO ITEMS VALUES ('FGH');
INSERT INTO ITEMS VALUES ('GHI');
INSERT INTO ITEMS VALUES ('HIJ');
INSERT INTO ITEMS VALUES ('IJK');
INSERT INTO ITEMS VALUES ('JKL');
COMMIT;
WITH rowgen AS (
SELECT rownum rn FROM dual CONNECT BY rownum <= 5 )
SELECT item_number || '-' || rn
FROM items
CROSS JOIN rowgen
ORDER BY item_number, rn;
+----------------------+
| ITEM_NUMBER||'-'||RN |
+----------------------+
| ABC-1 |
| ABC-2 |
| ABC-3 |
| ABC-4 |
| ABC-5 |
| BCD-1 |
| BCD-2 |
| BCD-3 |
| BCD-4 |
| BCD-5 |
| CDE-1 |
| CDE-2 |
| CDE-3 |
| CDE-4 |
| CDE-5 |
| ... |
+----------------------+
我在 Oracle SQL 中有一个要求,即特定值应重复 5 次。所以,我编写了以下查询并得到了预期的结果。
SELECT Item_Name || RANGES AS Item_Number
FROM
(
SELECT DISTINCT 'Price Line ' || column1 || '-' AS Item_Name, level+0 RANGES
FROM
(
SELECT DISTINCT column1 from tbl where column1 in
(
'ABC',
'BCD'
)
) connect by level <= 5
) order by Item_Number
OUTPUT:
Price Line ABC-1
Price Line ABC-2
Price Line ABC-3
Price Line ABC-4
Price Line ABC-5
Price Line BCD-1
Price Line BCD-2
Price Line BCD-3
Price Line BCD-4
Price Line BCD-5
但是当我添加超过 10 个值时,如 'DEF'、'EFG'、.....'XYZ',查询会持续执行数小时而没有任何结果。
如有任何帮助或建议,我们将不胜感激。
此致,
确保 CONNECT BY
未在您的 table 行上运行。例如,使用常见的 table 表达式(即 WITH
子句)使用 CONNECT BY
创建一个包含 5 行的行源,然后 CROSS JOIN
该行源到您的 table。这是一个例子。
CREATE TABLE ITEMS ( item_number VARCHAR2(30) );
INSERT INTO ITEMS VALUES ('ABC');
INSERT INTO ITEMS VALUES ('BCD');
INSERT INTO ITEMS VALUES ('CDE');
INSERT INTO ITEMS VALUES ('DEF');
INSERT INTO ITEMS VALUES ('EFG');
INSERT INTO ITEMS VALUES ('FGH');
INSERT INTO ITEMS VALUES ('GHI');
INSERT INTO ITEMS VALUES ('HIJ');
INSERT INTO ITEMS VALUES ('IJK');
INSERT INTO ITEMS VALUES ('JKL');
COMMIT;
WITH rowgen AS (
SELECT rownum rn FROM dual CONNECT BY rownum <= 5 )
SELECT item_number || '-' || rn
FROM items
CROSS JOIN rowgen
ORDER BY item_number, rn;
+----------------------+ | ITEM_NUMBER||'-'||RN | +----------------------+ | ABC-1 | | ABC-2 | | ABC-3 | | ABC-4 | | ABC-5 | | BCD-1 | | BCD-2 | | BCD-3 | | BCD-4 | | BCD-5 | | CDE-1 | | CDE-2 | | CDE-3 | | CDE-4 | | CDE-5 | | ... | +----------------------+