Oracle--SQL技巧之二(多行记录用逗号拼接在一起)
需求:
目前接触BI系统,由于业务系统的交易记录有很多,常常有些主管需要看到所有的记录情况,但是又不想滚动,想一眼就可以看到所有的,于是就想到了字符串拼接的形式。
解决方案:使用Oracle自带的函数 WMSYS.WM_CONCAT,进行拼接。
函数限制:它的输出不能超过4000个字节。
为了不让SQL出错,又可以满足业务的需求,超过4000个字节的部分,使用“。。。”
实现SQL如下:
CREATE TABLE TMP_PRODUCT
(PRODUCT_TYPE VARCHAR2(255),
PRODUCT_NAME VARCHAR2(255));
insert into tmp_product
select 'A','ProductA'||rownum from dual
connect by level < 100
union all
select 'B','ProductB'||rownum from dual
connect by level < 300
union all
select 'C','ProductC'||rownum from dual
connect by level < 400
union all
select 'D','ProductD'||rownum from dual
connect by level < 500
union all
select 'E','ProductE'||rownum from dual
connect by level < 600;
SELECT PRODUCT_TYPE,
WM_CONCAT(PRODUCT_NAME) || MAX(STR) AS PRODUCT_MULTI_NAME
FROM (SELECT PRODUCT_TYPE,
PRODUCT_NAME,
CASE
WHEN ALL_SUM > 4000 THEN
'...'
ELSE
NULL
END AS STR
FROM (SELECT PRODUCT_TYPE,
PRODUCT_NAME,
SUM(VSIZE(PRODUCT_NAME || ',')) OVER(PARTITION BY PRODUCT_TYPE) AS ALL_SUM,
SUM(VSIZE(PRODUCT_NAME || ',')) OVER(PARTITION BY PRODUCT_TYPE ORDER BY PRODUCT_NAME) AS UP_SUM
FROM TMP_PRODUCT)
WHERE (UP_SUM <= 3998 AND ALL_SUM > 4000)
OR ALL_SUM <= 4001)
GROUP BY PRODUCT_TYPE
转载于:https://www.cnblogs.com/dctit/archive/2013/01/08/2851967.html
Oracle--SQL技巧之二(多行记录用逗号拼接在一起)相关推荐
- sql拼接同一字段中的数据_用SQL将Oracle中同一列的多行记录拼接成一个字符
用SQL将Oracle中同一列的多行记录拼接成一个字符串 用SQL将Oracle中同一列的多行记录拼接成一个字符串 [sql] -- 原始数据 -- a 111 -- b 222 -- a ...
- oracle中删除一天记录吗,删除oracle SQL中超过24小时的记录(delete records older than 24 hours in oracle SQL)...
删除oracle SQL中超过24小时的记录(delete records older than 24 hours in oracle SQL) 我想删除所有超过24小时的记录. 我使用以下查询相同, ...
- Oracle SQL语句大全(二)
avg(sal) desc; 查找部门中平均薪水打印2000的员工并按部门号进行排序,查询分组后的平均薪水必须大于1500,查询结果按平均薪水从低到高排列 49.select ename from e ...
- Oracle SQL符号分隔的多行字符串拆分
之前写了一篇文章,http://blog.csdn.net/seandba/article/details/72644257 讨论了从单行字符串拆分到多行字符串拆分,最后的解决不算圆满. 从一个比较简 ...
- Oracle Sql技巧 - Upsert, Multitable Insert, Undrop
近期参加OCP培训,讲师说的太快,之前一直是SQLSERVER,很多东西要恶补了. UpSert功能: MERGE <hint> INTO <table_name> USING ...
- 如何将Oracle中同一列的多行记录拼接成一个字符串 十一__262 | 浏览 8183 次 推荐于2016-01-25 17:34:18 最佳答案 需要用wm_concat函数来实现。
需要用wm_concat函数来实现. 如目前在emp表中查询数据如下: 要按照deptno相同的将ename以字符串形式合并,可用如下语句: 1 select deptno,wm_concat(ena ...
- 如何将Oracle中同一列的多行记录拼接成一个字符串
关键字wm_concat SELECTPROJECT,wm_concat (DETAIL_NAME) DETAIL_NAMEFROM(SELECTPR. PROJECT,PR.DETAIL_NAME ...
- 多个值合并成一个字段oracle排序,Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)...
原帖:http://www.cnblogs.com/nayitian/p/3231734.html wmsys.wm_concat Definition: The Oracle PL/SQL WM_C ...
- oracle记录合并,Oracle多行记录合并处理
1:效果如下图所示: 表T1: CREATE TABLE T1 ( WEEKWORKID VARCHAR2(20) , DD VARCHAR2(20) ) 表T2 CREATE TABLE T2 ( ...
最新文章
- 为 Asp.net 网站新增发送手机短信功能
- GameByro渲染系统剖析
- python怎么用数据修改,如何更改数据框Python中的值
- 说说 JAVA 代理模式
- 【业务知识】数字档案馆建设内容
- jdbctemplate分页mysql_jdbcTemplate实现分页功能
- 2017.10.1 蚯蚓 思考记录
- python从入门到实践答案第六章-《Python从入门到实践》第六章动手试一试
- linux 下网站压力测试工具webbench
- matlab的otdr仿真,otdr测试曲线生成软件-OTDR测试曲线图仿真软件TrcView 4.0 官方免费版 - 河东下载站...
- 震惊:爱测未来技术嘉年华竟然这些免费送
- 对接亚马逊 SP-API(Amazon Selling Partner API) 第五章:Reports 模块
- 解决双击excel文件打开多个excel.exe进程的问题
- 基于javaweb的律师事务所律师管理系统(java+ssm+html+js+jsp+mysql)
- MFC 控件PictureControl 清除显示
- 【Scratch课件-变量】小熊出游
- 【电力电子技术】Unit 2 电力电子器件
- 扎克伯格说了两句大实话!一句价值1300亿美元,另一句让美国人扎心了…
- 2020网易大数据开发面试题整理 (提前批) (持续更新)
- 知乎在商业化的道路上大动作频频,知乎,直乎,播乎?
热门文章
- 如何异步提交表单 如何异步跨域提交表单
- __user_initial_stackheap 库函数翻译(转)
- s6-7 TCP 传输策略
- mysql 分组求和_MySql基础语法
- vba 数组赋值_VBA数组与字典解决方案第18讲:VBA中静态数组的定义及创建
- centos7开放端口访问不了_基于TiUP cluster 在centos7系统上模拟生产环境部署TiDB数据库...
- 你有一份云栖大会的IoT邀请函,请查收
- Flink CDC 2.0 正式发布,详解核心改进
- 云原生数据库 2.0:一站式全链路数据管理与服务
- 业务理解有偏差,产品和开发如何达成共识?