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
使用 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