UNPIVOT 関数と PIVOT 関数の両方を使用して結果を取得することをお勧めします。
UNPIVOT は、複数の列を 1 つの列の複数の行に変換するために使用され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
値があります。この新しい値は、PIVOT を適用するものになります。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 |