Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Oracle SQL中组合多行(有多个限制)_Oracle_Obiee_String Aggregation - Fatal编程技术网

如何在Oracle SQL中组合多行(有多个限制)

如何在Oracle SQL中组合多行(有多个限制),oracle,obiee,string-aggregation,Oracle,Obiee,String Aggregation,我需要合并Oracle SQL中的多行,但无法访问LISTAGG或wm_concat(已禁用EVALUATE_AGGR) 注意:我需要它在Oracle OBIEE 11.1.1.9中工作 感谢所有的帮助或提示。啊。我不喜欢将此作为答案,但我发现无论是在Oracle Base(见Alex Poole的评论)还是在William Robertson的网站(在Oracle Base文章中引用)上的sys\u connect\u by\u path解决方案都不够完美,这不适合评论 Oracle基本链接:

我需要合并Oracle SQL中的多行,但无法访问LISTAGG或wm_concat(已禁用EVALUATE_AGGR)

注意:我需要它在Oracle OBIEE 11.1.1.9中工作


感谢所有的帮助或提示。

啊。我不喜欢将此作为答案,但我发现无论是在Oracle Base(见Alex Poole的评论)还是在William Robertson的网站(在Oracle Base文章中引用)上的
sys\u connect\u by\u path
解决方案都不够完美,这不适合评论

Oracle基本链接: 威廉·罗伯逊网站:

Oracle Base上的解决方案在只需要一个时使用两个调用
row\u number()
,并使用聚合查询而不是
connect\u by\u isleaf
。也许这是William最初发布的解决方案,但他的页面目前有更好的解决方案,只使用一个
row\u number()
call和
connect\u by\u isleaf
,而不是聚合

然而,在William的页面上,他使用了
ltrim()
,没有显示要修剪哪个字符的参数,因此实际上没有效果。他从
行数()的值中减去1,因此在结果中,每个逗号分隔的列表中的第一个标记被忽略

这是正确的解决方案-供参考;我认为这一切都没有独创性。插图在标准
SCOTT
模式中的
EMP
表上运行

select deptno
     , ltrim(sys_connect_by_path(ename,','), ',') as name_list
from   ( select deptno
              , ename
              , row_number() over (partition by deptno order by ename) as seq
         from   emp )
where connect_by_isleaf = 1
connect by seq = prior seq + 1 and deptno = prior deptno
start with seq = 1;

DEPTNO  NAME_LIST
------  ------------------------------------
10      CLARK,KING,MILLER
20      ADAMS,FORD,JONES,SCOTT,SMITH
30      ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

啊。我不喜欢将此作为答案,但我发现无论是在Oracle Base(见Alex Poole的评论)还是在William Robertson的网站(在Oracle Base文章中引用)上的
sys\u connect\u by\u path
解决方案都不够完美,这不适合评论

Oracle基本链接: 威廉·罗伯逊网站:

Oracle Base上的解决方案在只需要一个时使用两个调用
row\u number()
,并使用聚合查询而不是
connect\u by\u isleaf
。也许这是William最初发布的解决方案,但他的页面目前有更好的解决方案,只使用一个
row\u number()
call和
connect\u by\u isleaf
,而不是聚合

然而,在William的页面上,他使用了
ltrim()
,没有显示要修剪哪个字符的参数,因此实际上没有效果。他从
行数()的值中减去1,因此在结果中,每个逗号分隔的列表中的第一个标记被忽略

这是正确的解决方案-供参考;我认为这一切都没有独创性。插图在标准
SCOTT
模式中的
EMP
表上运行

select deptno
     , ltrim(sys_connect_by_path(ename,','), ',') as name_list
from   ( select deptno
              , ename
              , row_number() over (partition by deptno order by ename) as seq
         from   emp )
where connect_by_isleaf = 1
connect by seq = prior seq + 1 and deptno = prior deptno
start with seq = 1;

DEPTNO  NAME_LIST
------  ------------------------------------
10      CLARK,KING,MILLER
20      ADAMS,FORD,JONES,SCOTT,SMITH
30      ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD


.
sys\u connect\u by\u path
one可能是一个起点,因为您已经对它们进行了排名。谢谢。我已经看到了这一点,但是Listag、wm_concat和COLLECT没有启用,我没有权限编写自己的函数。好的:也许我可以让系统通过路径连接到work@delica这是进入OBIE中的直接数据库请求吗?或者你要尝试将其放入RPD?@delica-这是第一个想法:尝试
connect\u by\u path
方法。@RobinMoffatt不能使用RPD或DDR。无论我使用什么,都必须通过列公式和/或子查询来完成。。
sys\u connect\u by\u path
one可能是一个起点,因为您已经对它们进行了排名。谢谢。我已经看到了这一点,但是Listag、wm_concat和COLLECT没有启用,我没有权限编写自己的函数。好的:也许我可以让系统通过路径连接到work@delica这是进入OBIE中的直接数据库请求吗?或者你要尝试将其放入RPD?@delica-这是第一个想法:尝试
connect\u by\u path
方法。@RobinMoffatt不能使用RPD或DDR。无论我使用什么,都必须通过列公式和/或子查询来完成。很好。现在我检查一下,我是在2004年写的,我不知道
ltrim
-1
是做什么用的。@WilliamRobertson-修复它永远不会太晚!正如您所看到的,人们仍然会使用它(有一个很好的理由:当人们不能使用像Listag这样的最新工具时,这是正确的答案)。别担心,我将复制您的版本:)非常感谢您花时间查找它并重新编写代码来帮助我。我现在不在工作,所以不能尝试,但会在周一这样做。请注意,我既不能使用RPD,也不能发出直接数据库请求,因此我使用的任何解决方案都必须通过OBIEE中的列公式、子查询、过滤器等来完成@WilliamRobertsonDo你知道在这样的限制下我怎么能修改你的代码吗?很好。现在我检查一下,我是在2004年写的,我不知道
ltrim
-1
是做什么用的。@WilliamRobertson-修复它永远不会太晚!正如您所看到的,人们仍然会使用它(有一个很好的理由:当人们不能使用像Listag这样的最新工具时,这是正确的答案)。别担心,我将复制您的版本:)非常感谢您花时间查找它并重新编写代码来帮助我。我现在不在工作,所以不能尝试,但会在周一这样做。请注意,我既不能使用RPD,也不能发出直接数据库请求,因此我使用的任何解决方案都必须通过OBIEE中的列公式、子查询、过滤器等来完成@WilliamRobertsonDo你知道在这样的限制下我怎么能修改你的代码吗?