2012-04-26 37 views
0

レコードDCP_SC_DOT_TBL私はSETIDCONTRACTIDの2つのキーがあります。これに加えて、チェックボックスであり、値がYまたはBlankの78個の列があります。たとえば、次のように列から行へのデータ変換

SETID CONTRACTID 1 2 3 ...... 78 
DCPID 00102  Y  Y 
DCPID 00192   Y Y   Y 

今、私はこのように、例えば、これらすべての列を削除し、テーブルを作成するために、各非空白列に新しい行を作成したい:

SETID CONTRACTID Checkbox(New column for all the 78 columns) 
DCPID 00102  1 
DCPID 00102  3 
DCPID 00192  2 
DCPID 00192  3 
DCPID 00192  78 

ことができる誰かしてくださいこれを達成する方法を提案しますか?私はCONTRACTIDに対して何らかのデータを含む列だけを必要とします。再読み込みあなたのポストで

答えて

0

あなたは、単に大規模なユニオンクエリを必要とするように、それが聞こえる:

Select SetId, ContractId, '1' As ColNum, 
From SomeTable As S1 
Where S1.Col1 = 'Y' 
Union All 
Select SetId, ContractId, '2' 
From SomeTable As S1 
Where S1.Col2 = 'Y' 
Union All 
Select SetId, ContractId, '3' 
From SomeTable As S1 
Where S1.Col3 = 'Y' 
... 
Union All 
Select SetId, ContractId, '78' 
From SomeTable As S1 
Where S1.Col78 = 'Y' 

あなたはメインテーブルから他の情報をもたらすために望んでいた場合、あなたはそれに設定され、この結果に参加します:

Select 
From SomeTable As S 
     Join (
       Select SetId, ContractId, '1' As ColNum, 
       From SomeTable As S1 
       Where S1.Col1 = 'Y' 
       Union All 
       Select SetId, ContractId, '2' 
       From SomeTable As S1 
       Where S1.Col2 = 'Y' 
       Union All 
       Select SetId, ContractId, '3' 
       From SomeTable As S1 
       Where S1.Col3 = 'Y' 
       ... 
       Union All 
       Select SetId, ContractId, '78' 
       From SomeTable As S1 
       Where S1.Col78 = 'Y' 
       ) As Z 
      On Z.SetId = S.SetId 
       And Z.ContractId = S.ContractId 
関連する問題