sql - 是否有一个 Oracle SQL 函数可以返回一行,其中的列基于一列中不同的不同值?
问题描述
ID | 数据码 | 数据值 |
---|---|---|
100 | 男人 | 是 |
100 | 受雇 | ñ |
100 | 已婚 | 是 |
101 | 男人 | ñ |
101 | 受雇 | 是 |
101 | 已婚 | 是 |
如果我有一个像下面这样的表,是否有任何函数允许我有一行只返回 id、man、married 列,其中 man 和 mapped 的值等于其各自的数据值,而无需自我加入。
期望的结果如下:
ID | 男人 | 已婚 |
---|---|---|
100 | 是 | 是 |
101 | ñ | 是 |
解决方案
尝试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 一行。
推荐阅读
- android - 耳机按钮单击时应用程序崩溃
- rust - 使用 wasm-bindgen 时如何在 Rust 中存储全局状态?
- css - Material UI v1 - 设置表格列宽
- java - 第一次自动登录
- python - 测试字典键是否以字母结尾?
- c# - 如何在 c# MVC Entity Framework 中处理多个提交按钮和复选框?
- node.js - node, express - 监听远程浏览器重新加载
- postgresql - Postgresql pg_dump 将公共添加到所有模式名称
- excel - Excel VBA密码保护命令按钮
- mysql - ActiveRecord 获取 n 个最新项目?