博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vertica的这些事<七>—— Vertica中实现Oracle中的ws_concat功能
阅读量:6220 次
发布时间:2019-06-21

本文共 2866 字,大约阅读时间需要 9 分钟。

vertica中没有类似Oracle中的ws_concat函数功能,需要开发UDF,自己对C++不熟悉,所有只有想其他方法解决了。

上代码:

SELECT node_state,    MAX(DECODE(row_number, 1, a.node_name)) ||    NVL(MAX(DECODE(row_number, 2, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 3, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 4, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 5, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 6, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 7, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 8, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 9, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 10, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 11, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 12, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 13, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 14, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 15, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 16, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 17, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 18, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 19, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 20, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 21, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 22, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 23, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 24, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 25, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 26, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 27, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 28, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 29, ',' || a.node_name)), '') ||    NVL(MAX(DECODE(row_number, 30, ',' || a.node_name)), '') node_nameFROM (select node_state,node_name,row_number() over (partition by node_state order by node_name) row_number from nodes) agroup by node_state;```运行结果:

UP |

v_csap_node0001,v_csap_node0002,v_csap_node0003,v_csap_node0004,v_csap_node0005,v_csap_node0006,v_csap_node0007,v_csap_node0008,v_csap_node0009,v_csap_node0010,v_csap_node0011,v_csap_node0012,v_csap_node0013,v_csap_node0014,v_csap_node0015,v_csap_node0016,v_csap_node0018,v_csap_node0019,v_csap_node0020,v_csap_node0021,v_csap_node0022,v_csap_node0023,v_csap_node0024,v_csap_node0025,v_csap_node0026,v_csap_node0027,v_csap_node0028,v_csap_node0029,v_csap_node0030
STANDBY | v_csap_node0017 (2 rows)“`

可以看到是我想要的结果。

有人会问了,我不知道自己要ws_concat几个类别怎么办,先运行一下

select node_state,node_name,row_number() over (partition by node_state order by node_name) row_number from nodes

看下row_number不就行了,或者把decode中的数字多写几个。当然最好的方法还是开发自定义程序包,引入到vertica中,直接使用函数实现,C++好的童鞋可以试一下。

转载地址:http://skmja.baihongyu.com/

你可能感兴趣的文章
Flask-SQLAlchemy获取一个字段里去掉重复的数据
查看>>
Python编写API接口
查看>>
[Json.net]忽略不需要的字段
查看>>
前端学HTTP之内容协商
查看>>
DiskLrucCache使用Demo(强烈推荐,非常好用)
查看>>
python编程(python开发的三种运行模式)【转】
查看>>
第四章 Spring.Net 如何管理您的类___对象、对象工厂和应用程序上下文
查看>>
navicat for mysql只导出数据表结构(转)
查看>>
C语言学习笔记 (001) - 常量指针与指针常量的区别(转帖)
查看>>
【IntelliJ Idea】idea下hibernate反向生成工具,根据数据表生成实体
查看>>
scala中隐式转换之隐式值和隐式视图
查看>>
Java 实例
查看>>
weblogic多池与oracle集群RAC
查看>>
php类库安装xml simplexml
查看>>
Asp.Net SignalR Hub集线器
查看>>
关于集成抽取进程重启后的现象分析
查看>>
56.如何清除已经设置的npm config配置
查看>>
028——VUE中事件修饰符once
查看>>
FineUIPro v5.1.0 发布了!
查看>>
easyui的日期控件
查看>>