0

我有这张桌子(节假日):

CCAA     FREEDAYS
AND       01/01,01/03
MAD       01/01,03/03
EUS       01/01,31/12
    ....

我想获得另一个表:

CCAA     FREEDAY
AND       01/01
AND       01/03
MAD       01/01
MAD       03/03
EUS       01/01
EUS       31/12
     ...

我正在使用这个 SQL 查询:

with t as (SELECT freedays AS txt, CCAA AS CCAA
          FROM HOLIDAYS )

select REGEXP_SUBSTR (txt, '[^,]+', 1, level) as freeday, CCAA
from t
connect by REGEXP_SUBSTR (txt, '[^,]+', 1, level) is not null

但是我得到了一张有无尽行的桌子......

你能帮我吗?非常感谢。

4

1 回答 1

1

您需要 connect-by 子句链接回相同的 CCAA 值;但是由于这引入了循环,您还需要包含一个非确定性函数。(此 Oracle 社区帖子中对此过程有很好的解释)。我正在使用dbms_random.value,您可以使用sys_guid()等。

...
connect by REGEXP_SUBSTR (txt, '[^,]+', 1, level) is not null
and prior ccaa = ccaa
and prior dbms_random.value is not null;

不知道为什么你在这里有一个 CTE,因为它似乎没有添加任何东西:

select REGEXP_SUBSTR (freedays, '[^,]+', 1, level) as freeday, CCAA
from holidays
connect by REGEXP_SUBSTR (freedays, '[^,]+', 1, level) is not null
and prior ccaa = ccaa
and prior dbms_random.value is not null;

FREEDAY     CCA
----------- ---
01/01       AND
01/03       AND
01/01       EUS
31/12       EUS
01/01       MAD
03/03       MAD

 6 rows selected 
于 2015-06-24T08:40:24.550 回答