2015-06-24 23 views
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 

但我獲得了無盡的行的表...

你能幫我嗎?非常感謝。

回答

1

您需要connect-by子句鏈接回相同的CCAA值;但是因爲這引入了循環,所以還需要包含非確定性函數。 (這個過程在this Oracle Community post中有很好的解釋)。我使用的是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 
+0

謝謝很多@Alex Poole。有用! – Madmartigan