首页 > 解决方案 > 是否有一个 Oracle SQL 函数可以返回一行,其中的列基于一列中不同的不同值?

问题描述

ID 数据码 数据值
100 男人
100 受雇 ñ
100 已婚
101 男人 ñ
101 受雇
101 已婚

如果我有一个像下面这样的表,是否有任何函数允许我有一行只返回 id、man、married 列,其中 man 和 mapped 的值等于其各自的数据值,而无需自我加入。

期望的结果如下:

ID 男人 已婚
100
101 ñ

标签: sqloracle

解决方案


尝试max(case...)group by.

select id, 
       max(CASE WHEN datacode = 'man' THEN datavalue ELSE null END) as man,
       max(CASE WHEN datacode = 'married' THEN datavalue ELSE null END) as married
from mytable
group by id;

聚合函数max()正在处理组,它将过滤掉null值 - 我们使用case语句为不匹配行创建的值。结果是每个 id 一行。


推荐阅读