我有一个具有以下结构的表格,我需要对输出进行逆透视,以便每个 ID
每个 PARAMETER
获得一行,并且它对应的 RATINGS
create table RATINGS(ID INT,PARAMETER1 INT,PARAMETER2 INT,PARAMETER3 INT,PARAMETER4 INT)
insert into RATINGS values(1000,1,3,2,1)
insert into RATINGS values(1002,2,3,3,2)
insert into RATINGS values(1007,3,3,2,1)
insert into RATINGS values(1015,1,3,1,3)
insert into RATINGS values(1019,3,2,1,1)
预期输出:
ID PARAMETERS RATING
1000 PARAMETER1 1
1000 PARAMETER2 3
1000 PARAMETER3 2
1000 PARAMETER4 1
1002 PARAMETER1 2
1002 PARAMETER2 3
1002 PARAMETER3 3
1002 PARAMETER4 2
1007 PARAMETER1 3
1007 PARAMETER2 3
1007 PARAMETER3 2
1007 PARAMETER4 1
1015 PARAMETER1 1
1015 PARAMETER2 3
1015 PARAMETER3 1
1015 PARAMETER4 3
1019 PARAMETER1 3
1019 PARAMETER1 2
1019 PARAMETER1 1
1019 PARAMETER1 1
稍后,我还需要进行过滤,以便仅获取具有评级 1 和 2 的行。所以输出必须是
ID PARAMETERS RATING
1000 PARAMETER1 1
1000 PARAMETER3 2
1000 PARAMETER4 1
1002 PARAMETER1 2
1002 PARAMETER4 2
1007 PARAMETER3 2
1007 PARAMETER4 1
1015 PARAMETER1 1
1015 PARAMETER3 1
1019 PARAMETER1 2
1019 PARAMETER1 1
1019 PARAMETER1 1
我可以使用以下查询获取前两个 ID
和 PARAMETERS
列:
select ID,[parameters] from RATINGS
unpivot
(
[value] for [PARAMETERS] in (PARAMETER1,PARAMETER2,PARAMETER3,PARAMETER4)
) unpvt
输出:
ID PARAMETERS
1000 PARAMETER1
1000 PARAMETER2
1000 PARAMETER3
1000 PARAMETER4
1002 PARAMETER1
1002 PARAMETER2
1002 PARAMETER3
1002 PARAMETER4
1007 PARAMETER1
1007 PARAMETER2
1007 PARAMETER3
1007 PARAMETER4
1015 PARAMETER1
1015 PARAMETER2
1015 PARAMETER3
1015 PARAMETER4
1019 PARAMETER1
1019 PARAMETER2
1019 PARAMETER3
1019 PARAMETER4
有人可以告诉我如何获取 Rating
列吗?
最佳答案
只需添加值列:
select ID,[parameters], [rating] = value
from RATINGS
unpivot
(
[value] for [PARAMETERS] in (PARAMETER1,PARAMETER2,PARAMETER3,PARAMETER4)
) unpvt
where value in (1,2);
关于sql - 如何取消透视同一个表中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54283404/