将行转换为列

Bob*_*Bob 2 sql db2 pivot

我怎么能转换这个表: -

INV   DESCRIPTION   AMOUNT
--------------------------
1001  CHARGES       100
1001  FREIGHT       30
1001  INSURANCE     20
1002  CHARGES       215
1002  FREIGHT       32
1002  INSURANCE     25
Run Code Online (Sandbox Code Playgroud)

使用SQL格式: -

INV   CHARGES  FREIGHT  INSURANCE
---------------------------------
1001  100      30       20
1002  215      32       25
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 5

使用:

  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
Run Code Online (Sandbox Code Playgroud)

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

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

  • SQL Server 2005+
  • Oracle 11g +

MySQL不支持PIVOT,也不支持SQLite.我不知道PostgreSQL或DB2何时/如果......