2012-04-26 37 views
0

我有一個記錄DCP_SC_DOT_TBL,其中有2個鍵SETIDCONTRACTID。除此之外,還有78個列是複選框,其中包含值YBlank。例如:從列到行的數據轉換

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