SQL 保留 3 列并将其他 3 列反透视为单列

TSQL keep 3 columns and unpivot the other 3 into a single column

使用 T-SQL,我有以下数据:

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

我希望将其逆轴旋转以使其代表:

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

到目前为止,我已经成功地对 id、name、number 和 question 部分进行了逆透视,但是无法得到相应的答案来完成。

我用过:

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

这明显是我数据的简化版,但是需求还是一样的。有人可以帮忙吗?

谢谢。

我的第一个回答:)

没有枢轴:

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