原始问题
我有一个表,其中包含两个属性组合的列表值:
Pattern | Feature | Value
--------+---------+-------
P1 | F1 | V1.1
P1 | F2 | V1.2
P2 | F1 | V2.1
P2 | F2 | V2.2
我想转换这个表,这样"Features"就变成了列名:
Pattern | F1 | F2
--------+---------+-------
P1 | V1.1 | V1.2
P2 | V2.2 | V2.2
纯SQL有可能做到这一点吗?我更喜欢SQLite,但也可以使用MySQL或PostgreSQL。
非常感谢!
JW之后扩展。's答案
我没有提到另一个包含实例的专栏。正如我所想,这并不重要。一个实例只能指定给一个图案,但包含许多特征。
Instance | Pattern | Feature | Value
---------+ --------+---------+-------
In1 | P1 | F1 | V1.1.1
In1 | P1 | F2 | V1.1.2
In2 | P1 | F1 | V2.1.1
In2 | P1 | F2 | V2.1.2
In3 | P2 | F1 | V3.2.1
In3 | P2 | F2 | V3.2.2
In4 | P2 | F1 | V4.2.1
In4 | P2 | F2 | V4.2.2
实例本身在结果表中并不重要,但结果表应该为每个实例包含一行。(它为SVM引擎提供信息(
SELECT Pattern,
MAX(CASE WHEN Feature = 'F1' THEN value ELSE NULL END) AS F1,
MAX(CASE WHEN Feature = 'F2' THEN value ELSE NULL END) AS F2
FROM tableName
GROUP BY Pattern
- SQLFiddle演示