2012-08-13 60 views
1

我有一個遺留表whos數據,我必須遷移到一個新的結構。在舊的結構中,每一行代表一年,每個月都有一個字段。在新的每一行將代表一個月。舊的結構是:Oracle拆分行

OLD_TABLE (
id1, 
id2, 
    year, 
price01, 
price02, 
price03, 
price04, 
... 
price11, 
price12, 
quantity01, 
quantity02, 
quantity03, 
... 
quantity11, 
quantity12, 

) - > PK = ID1,ID2,一年

新的結構是這樣的:

NEW_TABLE (
id1, 
id2, 
year, 
month, 
quantity, 
price, 

) - > PK = ID1,ID2,一年

關於如何繼續將數據從舊結構遷移到新結構的任何建議?

謝謝!

回答

3

如果您使用11g或以上版本,看看unpivot語法

喜歡的東西...

SELECT * 
FROM yourtable 
UNPIVOT (price FOR pmonth IN (price01 AS 1, price02 AS 2...)) 
UNPIVOT (quantity FOR qmonth IN (quantity01 AS 1, quantity02 AS 2...)) 
WHERE pmonth=qmonth 
+0

感謝,這真是棒極了! – maephisto 2012-08-13 08:30:24

1
SELECT id1, id2, year, 1 as month, quantity01 as quantity, price01 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 2 as month, quantity02 as quantity, price02 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 3 as month, quantity03 as quantity, price03 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 4 as month, quantity04 as quantity, price04 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 5 as month, quantity05 as quantity, price05 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 6 as month, quantity06 as quantity, price06 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 7 as month, quantity07 as quantity, price07 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 8 as month, quantity08 as quantity, price08 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 9 as month, quantity09 as quantity, price09 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 10 as month, quantity010 as quantity, price010 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 11 as month, quantity011 as quantity, price011 as price FROM old_table 
UNION ALL 
SELECT id1, id2, year, 12 as month, quantity012 as quantity, price012 as price FROM old_table 
;