0

原始问题

我有一个表,其中包含两个属性组合的列表值:

Pattern | Feature | Value
--------+---------+-------
 P1     | F1      | V1.1
 P1     | F2      | V1.2
 P2     | F1      | V2.1
 P2     | F2      | V2.2

我想转换表格,使“功能”成为列名:

Pattern | F1      | F2
--------+---------+-------
 P1     | V1.1    | V1.2
 P2     | V2.2    | V2.2

纯SQL可以做到吗?我更喜欢 SQLite,但也可以使用 MySQL 或 PostgreSQL。

非常感谢!

在 JW. 的回答之后扩展

我没有提到包含实例的另一列。正如我所想,这并不重要。一个实例只能分配给一种模式,但包含许多特征。

   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

实例本身在结果表中并不重要,但结果表应包含每个实例的一行。(这是 Tor 馈送 SVM 引擎)

4

1 回答 1

2
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
于 2013-03-07T05:32:15.830 回答