sql server - Pivot millons of records -
i have table 4 columns , more 100 million records. table design:
id char(12) pk type char(2) pk (values 1,2,3) dcid varchar(10) null ind varchar(2) null (values y, n)
this needs pivoted like
id, dcid1, dcid2, dcid3, ind1, ind2, ind3
if type having value 1,then in pivoted table dcid1
should have value or if type 2 dcid2
should have value , on. correspoding ind
needs placed in ind1
, ind2
, ind3
that.
how pivot this?
my suggestion @ using both unpivot , pivot functions result.
the unpivot used convert dci
, ind
multiple columns multiple rows in single column. once done, can pivot data columns.
the unpivot code similar this:
select id, col +type new_col, value ( select id, type, dcid, cast(ind varchar(10)) ind yt ) d unpivot ( value col in (dcid, ind) ) unpiv;
see sql fiddle demo. gives result:
| id | new_col | value | ---------------------------------- | 1 | dcid1 | test | | 1 | ind1 | y | | 2 | dcid2 | est | | 2 | ind2 | y |
the new_col
contains dcid
, ind
names , has type
value concatenated end. new value apply pivot to:
select id, dcid1, dcid2, dcid3, ind1, ind2, ind3 ( select id, col +type new_col, value ( select id, type, dcid, cast(ind varchar(10)) ind yt ) d unpivot ( value col in (dcid, ind) ) unpiv ) src pivot ( max(value) new_col in (dcid1, dcid2, dcid3, ind1, ind2, ind3) ) piv;
see sql fiddle demo. result be:
| 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 |
Comments
Post a Comment