我有一个包含4列和超过1亿条记录的表。表格设计:
ID char(12) PK
Type Char(2) PK (Values 1,2,3)
DCID varchar(10) Null
IND Varchar(2) Null (Values Y, N)这需要像这样旋转
ID, DCID1, DCID2, DCID3, IND1, IND2, IND3如果类型的值为1,则在透视表中,DCID1应具有值,或者,如果类型为2,则DCID2应具有值,依此类推。同样,相应的IND也需要放在IND1,IND2,IND3中。
如何将其转化为轴心?
发布于 2013-05-09 00:41:50
我的建议是同时使用UNPIVOT和PIVOT函数来获得结果。
UNPIVOT将用于将DCI和IND多列转换为单列中的多行。一旦完成,您就可以将数据旋转回列中。
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和IND名称,并将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 |https://stackoverflow.com/questions/16445723
复制相似问题