动态转置,一行变多行
【问题】
我从一个表中查询出一条数据,数据中有很多字段,例如:
列名:操作人1 操作时间1 操作人2 操作时间2 操作人3 操作时间 3 .............
数据:小明 20140304 小红 20140909 小王 20150101 .............
现在我想要的sql是这样一个实现结果,
小明 20140304
小红 20140909
小王 20150101
......
也就是一行转成多行,包含两列.
求大神给出一个具体的sql,我自己写的个感觉太复杂了,有没什么好的sql能简单解决。用的是oracle 11g
【回答】
如果字段不是很多可以直接纵向union起来,但如果列太多,甚至多个表(列数不同)都要做这样的查询,就比较复杂了。这种时候用SPL写起来比较简单(假定表时只有一行数据):
A |
|
1 |
=oracle.query("select * from tb1")(1) |
2 |
=create(操作人,操作时间) |
3 |
>A2.record(A1.array()) |
执行脚本前,将数据保存在数据库的表tb1 中,在集算器里增加连接 Oracle 数据库的数据源配置(可参考 [集算器怎样使用 oracle 数据库](https://c.raqsoft.com.cn/article/1541489540894) 和官网文档《数据库配置》http://doc.raqsoft.com.cn/esproc/tutorial/sjkpzh.html)。
A1: oracle是数据源对象,使用query查询出数据所在表数据,(1)表示取第一行数据,最终得到A1;
A2: 创建序表A2, 用了保存最终的查询结果;
A3: 将A1中的记录,经过处理,转换为多行记录,并将结果保存到A2中,得到转换后的结果: