2016-12-21 9 views
1

У меня возникли трудности с попыткой получить некоторые данные в MSSQL. Вот что у меня есть:Нужна помощь PIVOT/UNPIVOT некоторые данные в SQL

SO_ID | SO_DATE | WAGE_A | WAGE_B | WAGE_B_DUR | 
1  | 12/12/06| 100 | 200 | 15  | 
2  | 10/10/06| 150 | 250 | 10  | 

Что я хочу:

SO_ID | SO_DATE | WAGE_TYPE | AMOUNT | DURATION | 
1  | 12/12/06| WAGE_A | 100 | NULL  | 
1  | 12/12/06| WAGE_B | 200 | 15  | 
2  | 10/10/06| WAGE_B | 250 | 10  | 
2  | 10/10/06| WAGE_A | 150 | NULL  | 

Я очень признателен, если вы могли бы дать мне некоторую помощь или совет (в том числе изменить первую таблицу).

ответ

1

Попробуйте также:

CREATE TABLE try_val(SO_ID int, SO_DATE int, WAGE_A int, WAGE_B int, WAGE_B_DUR int) 

insert into try_val values (1  , 12/12/06, 100 , 200 , 15  ) 
insert into try_val values (2  , 10/10/06, 150 , 250 , 10  ) 


select SO_ID,SO_DATE,'WAGE_A' AS WAGE_TYPE,WAGE_A AS AMOUNT,NULL AS DURATION from try_val 
UNION ALL 
select SO_ID,SO_DATE,'WAGE_B' AS WAGE_TYPE,WAGE_A AS AMOUNT,WAGE_B_DUR AS DURATION from try_val 
ORDER BY SO_ID 
+0

Ваш код решить мою проблему сейчас, спасибо. – Acunk

0

Вы можете использовать простой SELECT, с UNION ALL следующим

select 
    SO_ID, 
    SO_DATE, 
    WAGE_TYPE = 'WAGE_A', 
    AMOUNT = WAGE_A, 
    DURATION = WAGE_B_DUR 
from myData 
union all 
select 
    SO_ID, 
    SO_DATE, 
    WAGE_TYPE = 'WAGE_B', 
    AMOUNT = WAGE_B, 
    DURATION = WAGE_B_DUR 
from myData 
order by SO_ID 
+0

Ваш ответ действителен, как @Ranjana, отличается только в строке 6, где я должен изменить его на NULL/0. Спасибо, в любом случае – Acunk