我的建議是看看使用UNPIVOT和PIVOT函數來得到結果。
的UNPIVOT將用於所述DCI
和多個列分成多個行轉換在單個列中。一旦完成,您可以將數據轉回列。
的UNPIVOT代碼將類似於此:
select id,
col +type as new_col,
value
from
(
select id,
type,
dcid,
cast(ind as varchar(10)) ind
from yt
) d
unpivot
(
value
for col in (DCID, IND)
) unpiv;
見SQL Fiddle with Demo。這給出了一個結果:
| ID | NEW_COL | VALUE |
----------------------------------
| 1 | dcid1 | test |
| 1 | ind1 | Y |
| 2 | dcid2 | est |
| 2 | ind2 | Y |
的new_col
包含DCID
和名稱和它串接到年底type
值。這個新的價值將是你申請什麼樞軸:
select id, DCID1, DCID2, DCID3, IND1, IND2, IND3
from
(
select id,
col +type as new_col,
value
from
(
select id,
type,
dcid,
cast(ind as varchar(10)) ind
from yt
) d
unpivot
(
value
for col in (DCID, IND)
) unpiv
) src
pivot
(
max(value)
for new_col in (DCID1, DCID2, DCID3, IND1, IND2, IND3)
) piv;
見SQL Fiddle with Demo。其結果將是:
| ID | DCID1 | DCID2 | DCID3 | IND1 | IND2 | IND3 |
-------------------------------------------------------------
| 1 | test | | | Y | | |
| 2 | | est | | | Y | |
| 3 | | | blah | | | Y |
| 4 | yes | | | N | | |
| 5 | | hs | | | N | |
| 6 | | | jr | | | N |
我已經轉義了,我的表中有ID,Type,DCID,IND,它有超過1億條記錄。而我再次樞軸我得到1000萬條記錄(pivoted)後內存異常錯誤。我可否知道哪些是轉移這些記錄的最佳方式? – man69 2013-05-09 17:14:06
@AnandMuthiah對,這進一步將'DCID'和'IND'轉化爲同一列。 – Taryn 2013-05-09 17:14:48