sql - 如何取消透视同一个表中的多列

标签 sql sql-server

我有一个具有以下结构的表格,我需要对输出进行逆透视,以便每个 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

我可以使用以下查询获取前两个 IDPARAMETERS 列:

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/

相关文章:

SQL postgres 按周对数据进行聚合/透视和总计

php - sql 计算查询不运行,#1054 字段列表中的未知列

sql - 为什么子查询和join这么慢

sql-server - 如何将动态 sql 插入临时表?

sql - 使用sql server参数化输入?

mysql - 按匹配次数排序

Mysql-一张表两个查询在一条语句中

sql - 如何通过指定字节数来对字符串进行子字符串化

sql - Azure 从 Azure 文件服务位置将 csv 文件批量导入 Azure SQL Server

sql-server - Sql服务器执行权限;申请权限失败