Oracle列转行函数使用
一、业务场景
今天需要实现一个table,有一列的效果是:用户姓名A(账号a),用户姓名B(账号b)...这种格式。这就想到oracle的列转行函数vm_concat。
可以用类似这种格式wm_concat(a || '(' || b || ')'),a表示用户名字段,b表示账号字段。
例子:
<select id="listAllocatedHandlerInfo" resultType="AllocationHandlerInfoVo">
select to_char(wm_concat(bs.user_name || '(' || bs.user_code || ')')) allocatedHandler,
sd.step_name approveStep
from t_flow_step fs
left join t_user bs
on fh.handler = bs.user_code
left join t_step_define sd
on fs.step_id = sd.step_id
group by sd.step_name
</select>
查询出来,是用,分隔的数据,实现列转行显示
ajax请求显示:
$.ajax({
url:".../loadAllocatedHandlerInfo.do",
dataType:"json",
data:{
flowId:$("#flowId").val()
},
async:false,
success:function(result){
//构建一下表格数据
var data;
if (result !="" && result != undefined) {
data = eval(result);
}
var table = "<tr><th>环节名称</th>"+
"<th>经办人</th>"+
"<th>操作</th></tr>";
for (var i in data) {
table += "<tr>";
table += "<td>"+data[i].approveStep+"</td>";
table += "<td>"+data[i].allocatedHandler+"</td>";
table += "<td><a href='javascript:pageOption.toMemListPage(\""+data[i].flowStepCode+"\");'>配置经办人</a></td>";
table += "</tr>";
}
$("#allocatedHandlerInfo").append(table);
}
});
实现效果
二、vm_concat函数补充
想通过id分组,可以用这样的sql:
select vm_concat(a) from A group by id
不想用默认的逗号分隔,可以用SQL:
ps:下面sql是替换默认的逗号,用'|'符号
select replace(vm_concat(a),',''|') from A group by id
oracle11用vm_concat导致查询缓慢
ps:在oracle11使用会导致查询缓慢,是因为查询出来的都是clob大字段,可以用SQL,用to_char关键字会快点,不过建议还是除非业务需要,不然速度要求高的场景不要使用
select to_char(vm_concat(a)) from A group by id
三、vm_concat版本问题
vm_concat版本不兼容问题,ps:可以参考我的另外一篇博客:
https://blog.csdn.net/u014427391/article/details/84867390
Oracle列转行函数使用的更多相关文章
- Oracle列转行函数版本不兼容解决方案
业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不 ...
- Oracle列转行函数LISTAGG()
--Oracle列转行函数LISTAGG() with tb_temp as( select 'China' 国家,'Wuhan' 城市 from dual union all select 'Chi ...
- Oracle列转行函数Listagg以及pivot查询示例
简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER) ...
- Oracle 列转行函数 Listagg()
这是最基础的用法: LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX) 例: select listagg(oeid,',') within GROUP (ord ...
- Oracle列转行 参数动态传入iBatis使用示例
Oracle行转列 参数动态传入iBatis使用示例 最近做了一个需求,需要获取工作流数据的各个节点的渠道数量信息,各渠道的费用信息~ 之前的需求是只需要获取渠道数据,所以做了渠道兼容,每个渠道数量的 ...
- oracle中行转列、列转行函数
多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str ...
- oracle列转行
unpivot()函数需要Oracle版本大于等于11g --创建表 create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 in ...
- oracle 的列转行函数 listagg()
当你的表X中有A,B两列,数据如下 A B a 1 a 2 a 3 b 1 b 2 b 3 想让数据以 a|1|2|3 , b|1|2|3 格式显示可使用listagg() 1.使用listagg() ...
- 转:Oracle的列转行函数:LISTAGG()
先看示例代码: with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nat ...
随机推荐
- 安卓学习 Drawable对象
whie(!images[currentImage].endWith(".PNG")&&!images[currentImage].endWith(".p ...
- P1439 最长公共子序列(nlognLCS问题)
模板 #include <iostream> #include <cstdio> using namespace std; ],loc[],b[],k,n,l,r,mid; i ...
- java 判断null和空
判断null和空 org.apache.commons.lang3 if(StringUtils.isBlank(valuationMeasureUnitName)){ }
- c语言01次作业--分支,顺序结构
C语言--第01次作业 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本章学习让我体会良多.首先,不得不承认自己是一个非常马虎的人.常见的问题就是输出格式上常因为没有与题目要 ...
- 关于jquery的选择器中的空格问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Aspose.Words提示The document appears to be corrupted and cannot be loaded.
https://download.csdn.net/download/tomeatbj163/10428046
- Python二维数组,坑苦了
myList = [[0] * 3] * 4 但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成 [[0,1,0], [0,1,0], [0,1,0], [0,1,0]] my ...
- Springboot & Mybatis 构建restful 服务四
Springboot & Mybatis 构建restful 服务四 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务三 2 restful ...
- 20175316盛茂淞 2018-2019-2 《Java程序设计》第6周学习总结
20175316盛茂淞 2018-2019-2 <Java程序设计>第6周学习总结 教材学习内容总结 第7章 内部类与异常类 1.使用 try.catch Java中所有信息都会被打包为对 ...
- eclipse下Spring环境构建及插件
首先获取spring tool suite插件 获取地址http://spring.io/tools/sts/ 然后打开eclipse选择菜单栏Help下Install new software添加我 ...