2015-10-19 64 views
1

我來記錄如下:轉到多個記錄

Item | Color Code 
Bag | 1,2,3 

我怎樣才能把這些記錄到:

Item | Color Code 
Bag | 1 
Bag | 2 
Bag | 3 

在SQL級別沒有新的程序的任何干預。

我有問題,構建一個軟件包和立方體沒有數據

+0

是彩色的代碼總是1,2,3?有多少種顏色代碼?它們總是用逗號隔開嗎? – Utsav

+0

不要將數據存儲爲逗號分隔值,它只會導致很多麻煩。每個項目一行是SQL方式! – jarlh

+0

hi utsav和jarlh .. 這是來自廠商db的源數據..我不能做任何除了尋找解決方案.. T_T感謝您的及時回覆,這是解決我的瓶頸建立立方體.. 那裏是大約100 +代碼....我將只使用立方體技術綁定顏色描述,目的是減少源數據庫上的負載,而不是使用連接 –

回答

0

的這種格式這將工作

with t1(Item,ColorCode) as 
    (select 'Bag', '1,2,3' from dual) 
select Item,regexp_substr(ColorCode, '[^,]+', 1, level) result 
from t1 
connect by level <= length(regexp_replace(ColorCode, '[^,]+')) + 1; 
+0

謝謝你!它正在工作.. 我在Cognos應用了SQL(SQL type = Pass through)並且這個工作正常..但是我可能知道這是否會給db性能帶來額外的負擔?或者我應該如何衡量影響? –

+0

如果數據以逗號分隔值存儲,那麼您必須使用正則表達式來提取它。所以這是一樣快,你可以檢索它。要查看性能,可以看到「解釋計劃」,但不能進一步降低性能。另外,如果答案適用於您,請點擊上面的勾號來接受(http://meta.stackexchange.com/questions/23138/how-to-accept-the-answer-on-stack-overflow)答案的左邊,以便它可以被關閉。 – Utsav

0

試試這個:

SELECT t.Item, 
     trim(regexp_substr(t.ColorCode, '[^,]+', 1, lines.column_value)) ColorCode 
    FROM t, 
    TABLE (CAST (MULTISET 
    (SELECT LEVEL FROM dual CONNECT BY LEVEL <= regexp_count(t.ColorCode, ',')+1) 
       AS sys.odciNumberList 
       ) 
     ) lines 

SQL FIDDLE DEMO

+1

謝謝你的解決方案! –

+0

@ChooiLingSiToh: - 不客氣! –