2015-11-10 36 views
0

,我有以下數據:TSQL保持3列和unpivot的另外3成使用TSQL單列

ID  name  number q1 q2 q3 
--- ----- ------ -- -- -- 
1  paul  7777  yes no maybe 
2  steve 8786  no yes definitely 

,我期待,這樣它代表了unpivot它:

ID name  number question answer 
-- ----  -----  -------- ------ 
1  paul  7777  Q1   yes 
1  paul  7777  Q2   no 
1  paul  7777  Q3   maybe 
2  steve  8786  Q1   no 
2  steve  8786  Q2   yes 
2  steve  8786  Q3   definitely 

到目前爲止,我已設法解除身份證,姓名,號碼和問題部分,但無法得到相應完成的答案。

我用:

select [name],[number],[id],[question_number] from (select [name],[number],[id], 
[q1],[q2],[q3]) unpivot 
(something for [question_number] in ([Q1],{Q2],[Q3])) as unpvt 

這顯然是我的數據的簡化版本,但需求仍然是相同的。任何人都可以幫忙嗎?

謝謝。

回答

1

我的第一個答案:)

沒有支點:

select ID,name,number,'Q1' as question ,Q1 as answer from #yourtable 
union all select ID,name,number,'Q2',Q2 from #yourtable 
union all select ID,name,number,'Q3',Q3 from #yourtable 

這裏完整的例子

create table #yourtable (
    ID int, 
    name nvarchar(20), 
    number int,  
    q1 nvarchar(20), 
    q2 nvarchar(20), 
    q3 nvarchar(20)); 
insert into #yourtable values(1 ,'paul', 7777,'yes','no','maybe'); 
insert into #yourtable values(2, 'steve', 8786, 'no', 'yes', 'definitely'); 

select ID,name,number,'Q1' as question ,Q1 as answer from #yourtable 
union all select ID,name,number,'Q2',Q2 from #yourtable 
union all select ID,name,number,'Q3',Q3 from #yourtable