动态转置,一行变多行

【问题】

我从一个表中查询出一条数据,数据中有很多字段,例如:
列名操作人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中,得到转换后的结果