Oracle分栏(非分页)查询

2024-01-28 03:52
文章标签 oracle 查询 分栏 非分

本文主要是介绍Oracle分栏(非分页)查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  不知道Oracle怎么进行数据分栏(分栏: 因数据列过长, 部分数据作为新列显示). 在这里先记录一下粗浅的查询方法.
数据源例子:

    select '日用百货' as cat, '手电筒' as name, 20 as amount, '2024-01-27' as dt from dualunion allselect '餐饮美食' as cat, '鸡公煲' as name, 15.9 as amount, '2024-01-27' as dt from dualunion allselect '餐饮美食' as cat, '海带粉' as name, 6 as amount, '2024-01-27' as dt from dualunion allselect '日用百货' as cat, '垃圾桶' as name, 9.9 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '大铁锅' as name, 66 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '电火锅' as name, 216 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '电饭锅' as name, 166 as amount, '2024-01-26' as dt from dualunion allselect '餐饮美食' as cat, '老乡鸡' as name, 19.9 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '塑料小板凳' as name, 8 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '垃圾袋' as name, 7.5 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '塑料靠背凳' as name, 10 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '鞋刷' as name, 4 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '撑衣杆' as name, 8.5 as amount, '2024-01-26' as dt from dualunion allselect '餐饮美食' as cat, '海带粉' as name, 6 as amount, '2024-01-26' as dt from dual

  思路: 创造提取新列的条件, 然后进行关联查询

with t as (select '日用百货' as cat, '手电筒' as name, 20 as amount, '2024-01-27' as dt from dualunion allselect '餐饮美食' as cat, '鸡公煲' as name, 15.9 as amount, '2024-01-27' as dt from dualunion allselect '餐饮美食' as cat, '海带粉' as name, 6 as amount, '2024-01-27' as dt from dualunion allselect '日用百货' as cat, '垃圾桶' as name, 9.9 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '大铁锅' as name, 66 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '电火锅' as name, 216 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '电饭锅' as name, 166 as amount, '2024-01-26' as dt from dualunion allselect '餐饮美食' as cat, '老乡鸡' as name, 19.9 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '塑料小板凳' as name, 8 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '垃圾袋' as name, 7.5 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '塑料靠背凳' as name, 10 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '鞋刷' as name, 4 as amount, '2024-01-26' as dt from dualunion allselect '日用百货' as cat, '撑衣杆' as name, 8.5 as amount, '2024-01-26' as dt from dualunion allselect '餐饮美食' as cat, '海带粉' as name, 6 as amount, '2024-01-26' as dt from dual
)
, tmd as (select p.*, ceil(p.rn/3) as dv, mod(p.rn, 3) as mdfrom (select row_number() over (partition by cat order by dt,amount desc) as rn, t.*from t) p
)
select t1.cat, t1.name as name1,t1.amount as amount1, t2.name as name2,t2.amount as amount2, t3.name as name3,t3.amount as amount3
from (select * from tmd where md=1) t1
left join (select * from tmd where md=2) t2 on t1.cat=t2.cat and t1.dv=t2.dv
left join (select * from tmd where md=0) t3 on t1.cat=t3.cat and t1.dv=t3.dv
order by t1.cat,t1.dv,t1.md
;

  查询结果:

CATNAME1AMOUNT1NAME2AMOUNT2NAME3AMOUNT3
日用百货电火锅216电饭锅166大铁锅66
日用百货塑料靠背凳10垃圾桶9.9撑衣杆8.5
日用百货塑料小板凳8垃圾袋7.5鞋刷4
日用百货手电筒20NULLNULLNULLNULL
餐饮美食老乡鸡19.9海带粉6鸡公煲15.9
餐饮美食海带粉6NULLNULLNULLNULL

在这里插入图片描述
后面再找时间研究吧. (2024-01-27)

这篇关于Oracle分栏(非分页)查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652389

相关文章

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被