2016-12-21 1 views
1

J'ai quelques difficultés à essayer d'obtenir des données dans MSSQL. Voici ce que j'ai:Besoin d'aide pour PIVOT/UNPIVOT certaines données dans 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  | 

Ce que je veux:

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  | 

je l'apprécie vraiment si vous pouviez me donner une aide ou des conseils (y compris le changement de la première table).

Répondre

1

Essayez aussi:

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

Votre code a résolu mon problème pour l'instant, merci. – Acunk

0

Vous pouvez utiliser un simple SELECT avec UNION ALL comme suit

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

Votre réponse est valide comme celle de @Ranjana, la seule différence dans la ligne 6 où je devrais la changer en NULL/0. Merci quand même – Acunk