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 ...
随机推荐
- Servlet之监听器(Listener)
一.监听器(Listener)概述 1.概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 Se ...
- yii2.0 邮件发送如何配置
邮件发送配置: 打开配置文件将下面代码添加到 components => [...]中(例:高级版默认配置在/common/config/main-local.php) 'mai ...
- X of a Kind in a Deck of Cards LT914
In a deck of cards, each card has an integer written on it. Return true if and only if you can choos ...
- 高速上手C++11 14 笔记2
lambda表达式和std function bind 两者配合构成了函数新的使用方法. 智能指针 sharedptr, uniqueptr, weak_ptr auto pointer = std: ...
- 小白的CTF学习之路6——阶段测评
刚才考了自己一次,下面我把题和答案放到下面 CPU中不含有以下选项中的 C A: 运算器 B: 寄存器 C: 内存 D: 时钟 这是一道送分题,CPU包含以下几种原 ...
- redis学习-集合set常用命令
redis学习-集合set常用命令 1.sadd:添加一个元素到集合中(集合中的元素无序的并且唯一) 2.smembers:查看集合中所有的元素(上图事例) 3.srem:删除结合中指定的元素 4 ...
- thinkphp 把小程序码二进制流存储到本地
public function getxcxm(){ $id = input('id'); $astk = json_decode($this->getasstk())->access_t ...
- 如何理解Unity组件化开发模式
Unity的开发模式核心:节点和组件,组件可以加载到任何节点上,每个组件都有 gameobject 属性,可以通过这个属性获取到该节点,即游戏物体. 也就是说游戏物体由节点和组件构成,每个组件表示物体 ...
- pt-query-digest 使用说明
pt-query-digest --user=anemometer --password=123456 --socket=/tmp/mysql.sock --port=43306 --review h ...
- Solaris:你好奇的十件事
想想你周围的人,看看他们正在使用的操作系统.绝大部分人的电脑都在用主流操作系统:Windows,MacOS,甚至是Ubuntu.当说到Solaris,Unix和BSD的时候,其他人还以为你说鸟语呢.除 ...