sql - 将行转换为列

标签 sql db2 pivot

如何转换此表:-

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

最佳答案

用途:

  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 何时/是否会...

关于sql - 将行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4677287/

相关文章:

sql - SAS 数据步骤/SQL 从多个具有相同 ID 的记录中选择最新记录

sql - 将同一列的两个或多个条目显示为一个字符串

python - 使用变量查询时 UPDATE TABLE 返回空值

mysql - 挑战!复杂的 MySQL 查询

ASP.NET "SQL0519: Prepared statement S000001 in use."DB2

sql - 无需 PIVOT 运算符即可执行枢转

sql-server - 如何将 IBM DB2 服务器添加到 SQL Server 的链接服务器

oracle - 子查询中的公用表表达式

r - 从gather()到pivot_longer()的数据集转换

sql - PostgreSQL Group By A,但仍拉取B字段