sql - 如何在 SQL 中不使用 PIVOT 函数进行透视?

标签 sql postgresql pivot

我想在不使用任何 PIVOT 函数的情况下对表进行透视,而仅使用纯 SQL(例如 PostgreSQL 语法)。

以这个数据集为例:

Order |   Element | Value |
---------------------------
1     | Item      | Bread |
1     | Quantity  |  3    |
1     | TotalCost |  3,30 |
2     | Item      | Pizza |
2     | Quantity  |  2    |
2     | TotalCost |  10   |
3     | Item      | Pasta |
3     | Quantity  |  5    |
3     | TotalCost |  2,50 |

我希望以 Order 列为中心,并具有以下内容:

Order | Item | Quantity | TotalCost |
-------------------------------------
1     | Bread |    3    |    3,30   |
2     | Pizza |    2    |    10     |
3     | Pasta |    5    |    2,50   |

如何在不使用任何数据透视函数的情况下再次实现这一目标?

最佳答案

解决方案A

使用CASE WHEN语句:

SELECT Order, 
       MAX(CASE WHEN Element = 'Item' THEN Value END) AS Item, 
       MAX(CASE WHEN Element = 'Quantity' THEN Value END) AS Quantity, 
       MAX(CASE WHEN Element = 'TotalCost' THEN Value END) AS TotalCost
FROM MyTable
GROUP BY 1

解决方案B

使用自左连接:

SELECT A.Order, A.Item, B.Quantity, C.TotalCost
FROM
    (SELECT Order, Value as Item
    FROM MyTable
    WHERE Element = 'Item') as A
    LEFT JOIN
    (SELECT Order, Value as Quantity
    FROM MyTable
    WHERE Element = 'Quantity') as B ON A.Order = B.Order
    LEFT JOIN
    (SELECT Order, Value as TotalCost
    FROM MyTable
    WHERE Element = 'TotalCost') as C ON B.Order = C.Order

后者可能没有那么高效,但在某些用例中可能会很有用。

关于sql - 如何在 SQL 中不使用 PIVOT 函数进行透视?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67549493/

相关文章:

sql - 查询具有耦合条件的行

mySQL AUTO_INCREMENT 列创建

java - 使用 Java (Java EE/Java SE) 的数据库应用程序设计模式

sql - oracle - 通过 dblink 提交?

mysql - 帮我优化这个 MySql 查询

sql - Postgresql 中不可预测的查询性能

sql - 转换日期 postgreSQL 时出错

mysql - 我的 table 组织不当的另一个问题

sql - 如何将动态数据透视表结果添加到 SSRS 报告?

sql - PIVOT SQL - 指导