sql - 将 Oracle 行转换为列的选择查询

标签 sql oracle

我有下表

ID-----Name------Value
1      City      New York
1      Country   USA
2      City      Barcelona
2      Country   Spain

期望的查询输出是

ID------City-------Country
1       New York   USA
2       Barcelona  Spain

能否请您告诉我是否可以使用 Oracle 中的查询来实现。我遇到了 listagg 和 pivote 这两个概念,但无法理解如何使用它们来实现我的需要。

我通过以下查询使用 listagg 以一种方式获得结果,但所有列都在单个列中,我需要将其分开。

select ID, 
       listagg(Name||';'||Value, ',') within group (order by Name) as Criteria
from table_name
group by ID; 

最佳答案

我会使用聚合来做到这一点:

select id, max(case when name = 'City' then value end) as city,
       max(case when name = 'Country' then value end) as country
from t
group by id;

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

相关文章:

java - 如何在 Oracle 中全局(或按 session )限制结果集?

sql - 使用 FETCH 、 OFFSET 或 PIVOTS 时出现 ORA-00933 问题

mysql - 根据相互喜欢连接MySQL中的两个表

php - 当使用 WHERE NOT IN 时,它返回 WHERE IN 之一

mysql - 将 CSV 导入 MySQL - 偏移 1 列

java - Flyway:迁移大量脚本时性能缓慢

oracle - 多列的唯一约束

php - 用于显示表中记录的 SQL 查询错误

c# - 在Sql中执行插入命令并返回插入的Id

sql - Oracle 相当于 SQL Server 快照隔离