SQL(ite)将列表转换为二维表,将行转换为列



原始问题

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

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演示

最新更新