【发布时间】:2015-10-01 19:47:10
【问题描述】:
我需要完成以下工作:
我有一个包含多列 (c1, c2, c3, c4 ... cn) 的表。
我想要一个以下列方式返回多行的查询(r1 r2 .. rx 是原始表中的行):
r1c1 r1c2 r1c3
r1c4 r1c5 r1c6
...
r1cn-2 r1cn-1 r1cn
r2c1 r2c2 r2c3
r2c4 r2c5 r2c6
...
r2cn-2 r2cn-1 r2cn
...
rxc1 rxc2 rxc3
rxc4 rxc5 rxc6
...
rxcn-2 rxn-1 rxcn
我知道我可以使用联合并重复基本相同的查询 n 次,但我需要在我无法控制的基于 Web 的报告系统中使用该查询,并且查询对于允许的最大字符数来说太大了在查询中。
有什么建议吗?
谢谢!
编辑:仅供参考,我正在使用无法更改的数据库在无法更改的报告工具中构建报告。因此,使用自定义函数/程序不是解决方案。它必须是 PL-SQL 查询。
更具体地说,我需要原始行中的多行,假设第 1 行是
a b c d e f h i j
第 2 行是
1 2 3 4 5 6 7 8 9
然后我会得到下表,其中包含 3 列:
a b c
d e f
h i j
1 2 3
4 5 6
7 8 9
【问题讨论】:
-
尝试将其实现为 PL-SQL 函数。在那里,您可以构建您需要的算法。您可以通过查询数据库元数据来获取表的列名,并将其交叉到您的行数据中。
-
似乎有点不清楚您要实现的目标,您是否需要在同一行的同一行上返回与列名连接的列值? edit: 如 col1 col2 col3 x y z a b c 并且您希望打印为: xcol1 ycol2 zcol3 (第一行) acol1 bcol2 ccol3 (第二行) ?
-
所以您基本上是在尝试对表中的列进行自动换行?对我来说,这听起来更像是 UI 演示问题,而不是数据问题。无论如何,也许最简单的方法是首先将所有内容扁平化为一列,然后将它们聚集成短行。
-
您好,请查看编辑。比你
-
如果你不能改变数据库,你就不能使用PL/SQL(这意味着你要创建一个存储过程)
标签: sql plsql rows multiple-columns unpivot