sql - 如何在选择 oracle 中将值分组到单行
问题描述
我有一个格式如下的表格:
place stage type
AFA11 1 TYPE_A
AFA11 2 TYPE_B
AFA12 1 TYPE_A
AFA12 2 TYPE_B
我正在尝试的查询是:
SELECT place,
CASE when type = 'TYPE_A' THEN stage end type_A ,
CASE when type= 'TYPE_B' THEN stage end type_B
FROM table WHERE place LIKE '%AFA%'
但它是这样返回的:
place type_A type_B
AFA11 1 null
AFA11 null 2
AFA12 1 null
AFA12 null 2
但我需要这样的回报:
place type_A type_B
AFA11 1 2
AFA12 1 2
我怎么能有这个回报?
解决方案
您可以GROUP BY
,并使用case
表达式进行条件聚合:
SELECT place,
MAX(CASE when type = 'TYPE_A' THEN stage end) type_A ,
MAX(CASE when type= 'TYPE_B' THEN stage end) type_B
FROM table WHERE place LIKE '%AFA%'
GROUP BY place
推荐阅读
- android - 我无法在 Android 10 中使用 DownloadManger 下载文件?
- html - 页面缩小时试图让导航栏消失
- c - 在这个 mutex/pthread_cond_wait 结构中,我的数据会在哪里丢失?
- swiftui - SwiftUI - @State property is not updated
- odoo - 为什么我的简单 odoo 扩展在升级时会使我的服务器崩溃?
- java - 2020 年 11 月 1 日/“帐户保留”:是否必须向“帐户保留”用户显示说明性消息?
- android - 行中图像的动态列表,带有换行符(之间没有空格),允许长按图像打开编辑选项 - Flutter
- laravel - 如何在 sql 数组 laravel 中找到项目
- reactjs - 如何在组件卸载上使用 useEffect 挂钩有条件地运行代码
- javascript - 如何通过函数式编程在一个公共键上合并 N 个元组数组?