2012-04-26 2 views
0

У меня есть запись DCP_SC_DOT_TBL, где есть 2 клавиши SETID и CONTRACTID. В дополнение к этому есть еще 78 столбцов, которые имеют флажки и содержат значение Y или Blank. Например:Преобразование данных из столбцов в строки

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 
Смежные вопросы