需求:

目前接触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技巧之二(多行记录用逗号拼接在一起)相关推荐

  1. sql拼接同一字段中的数据_用SQL将Oracle中同一列的多行记录拼接成一个字符

    用SQL将Oracle中同一列的多行记录拼接成一个字符串 用SQL将Oracle中同一列的多行记录拼接成一个字符串 [sql] -- 原始数据 -- a   111 -- b   222 -- a   ...

  2. 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小时的记录. 我使用以下查询相同, ...

  3. Oracle SQL语句大全(二)

    avg(sal) desc; 查找部门中平均薪水打印2000的员工并按部门号进行排序,查询分组后的平均薪水必须大于1500,查询结果按平均薪水从低到高排列 49.select ename from e ...

  4. Oracle SQL符号分隔的多行字符串拆分

    之前写了一篇文章,http://blog.csdn.net/seandba/article/details/72644257 讨论了从单行字符串拆分到多行字符串拆分,最后的解决不算圆满. 从一个比较简 ...

  5. Oracle Sql技巧 - Upsert, Multitable Insert, Undrop

    近期参加OCP培训,讲师说的太快,之前一直是SQLSERVER,很多东西要恶补了. UpSert功能: MERGE <hint> INTO <table_name> USING ...

  6. 如何将Oracle中同一列的多行记录拼接成一个字符串 十一__262 | 浏览 8183 次 推荐于2016-01-25 17:34:18 最佳答案 需要用wm_concat函数来实现。

    需要用wm_concat函数来实现. 如目前在emp表中查询数据如下: 要按照deptno相同的将ename以字符串形式合并,可用如下语句: 1 select deptno,wm_concat(ena ...

  7. 如何将Oracle中同一列的多行记录拼接成一个字符串

    关键字wm_concat SELECTPROJECT,wm_concat (DETAIL_NAME) DETAIL_NAMEFROM(SELECTPR. PROJECT,PR.DETAIL_NAME ...

  8. 多个值合并成一个字段oracle排序,Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)...

    原帖:http://www.cnblogs.com/nayitian/p/3231734.html wmsys.wm_concat Definition: The Oracle PL/SQL WM_C ...

  9. oracle记录合并,Oracle多行记录合并处理

    1:效果如下图所示: 表T1: CREATE TABLE T1 ( WEEKWORKID VARCHAR2(20) , DD VARCHAR2(20) ) 表T2 CREATE TABLE T2 ( ...

最新文章

  1. 为 Asp.net 网站新增发送手机短信功能
  2. GameByro渲染系统剖析
  3. python怎么用数据修改,如何更改数据框Python中的值
  4. 说说 JAVA 代理模式
  5. 【业务知识】数字档案馆建设内容
  6. jdbctemplate分页mysql_jdbcTemplate实现分页功能
  7. 2017.10.1 蚯蚓 思考记录
  8. python从入门到实践答案第六章-《Python从入门到实践》第六章动手试一试
  9. linux 下网站压力测试工具webbench
  10. matlab的otdr仿真,otdr测试曲线生成软件-OTDR测试曲线图仿真软件TrcView 4.0 官方免费版 - 河东下载站...
  11. 震惊:爱测未来技术嘉年华竟然这些免费送
  12. 对接亚马逊 SP-API(Amazon Selling Partner API) 第五章:Reports 模块
  13. 解决双击excel文件打开多个excel.exe进程的问题
  14. 基于javaweb的律师事务所律师管理系统(java+ssm+html+js+jsp+mysql)
  15. MFC 控件PictureControl 清除显示
  16. 【Scratch课件-变量】小熊出游
  17. 【电力电子技术】Unit 2 电力电子器件
  18. 扎克伯格说了两句大实话!一句价值1300亿美元,另一句让美国人扎心了…
  19. 2020网易大数据开发面试题整理 (提前批) (持续更新)
  20. 知乎在商业化的道路上大动作频频,知乎,直乎,播乎?

热门文章

  1. 如何异步提交表单 如何异步跨域提交表单
  2. __user_initial_stackheap 库函数翻译(转)
  3. s6-7 TCP 传输策略
  4. mysql 分组求和_MySql基础语法
  5. vba 数组赋值_VBA数组与字典解决方案第18讲:VBA中静态数组的定义及创建
  6. centos7开放端口访问不了_基于TiUP cluster 在centos7系统上模拟生产环境部署TiDB数据库...
  7. 你有一份云栖大会的IoT邀请函,请查收
  8. Flink CDC 2.0 正式发布,详解核心改进
  9. 云原生数据库 2.0:一站式全链路数据管理与服务
  10. 业务理解有偏差,产品和开发如何达成共识?