将行转换为列

Posted

技术标签:

【中文标题】将行转换为列【英文标题】:Convert Row to Column 【发布时间】:2011-01-13 06:06:55 【问题描述】:

如何转换此表:-

INV   DESCRIPTION   AMOUNT
--------------------------
1001  CHARGES       100
1001  FREIGHT       30
1001  INSURANCE     20
1002  CHARGES       215
1002  FREIGHT       32
1002  INSURANCE     25

使用 SQL 转换为这种格式:-

INV   CHARGES  FREIGHT  INSURANCE
---------------------------------
1001  100      30       20
1002  215      32       25

【问题讨论】:

该操作称为旋转。 见:***.com/tags/pivot/faq Serge Rielau 最近写了一篇关于在 DB2 中进行数据透视的博文:ibm.com/developerworks/mydeveloperworks/blogs/SQLTips4DB2LUW/… 【参考方案1】:

用途:

  SELECT t.inv,
         MAX(CASE WHEN t.description = 'CHARGES' THEN t.amount ELSE NULL END) AS charges,
         MAX(CASE WHEN t.description = 'FREIGHT' THEN t.amount ELSE NULL END) AS freight,
         MAX(CASE WHEN t.description = 'INSURANCE' THEN t.amount ELSE NULL END) AS insurance
    FROM YOUR_TABLE t
GROUP BY t.inv
ORDER BY t.inv

为了支持动态描述列表,您必须指定这是针对哪个数据库,因为每个数据库的动态 SQL 语法都不同。

PIVOT/UNPIVOT 是 ANSI 语法,但支持有限:

SQL Server 2005+ Oracle 11g+

mysql 不支持 PIVOT,SQLite 也不支持。我不知道 PostgreSQL 或 DB2 何时/是否...

【讨论】:

@Bob:已更新,但“它不起作用”并没有给我任何可以使用的东西。并非所有人都可以使用 DB2 进行测试,更不用说版本了。

以上是关于将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章

pyspark 将行转换为列

使用R将行转换为列,将列转换为行

不能从子查询将行转换为列

将行转换为列

建议将行转换为列的方法

根据条件将行转换为列