…枢轴((X)中B的总和(A))
现在,B的数据类型为varchar2,X为一串由逗号分隔的varchar2值。 X的值是从同一表的列(例如CL)中选择不同的值。这种枢轴查询工作的方式。
但是问题是,每当CL列中有一个新值时,我都必须手动将其添加到字符串X中。
我尝试用从CL选择不同的值替换X。但是查询未运行。 我感觉到的原因是因为要替换X,我们需要用逗号分隔的值。 然后,我创建了一个函数以返回确切的输出以与字符串X匹配。但是查询仍然无法运行。 显示的错误消息如“缺少righr异常状态”,“文件通信通道结束”等。 我尝试了透视xml,而不仅仅是透视,查询运行了,但给出了像oraxxx这样的vlaues,它们根本没有任何值。
也许我没有正确使用它。 您能告诉我一些方法来创建具有动态值的枢轴吗?
您不能将非常量字符串放在INivot子句的子句中。 您可以为此使用数据透视XML。
IN
从文档:
子查询子查询仅与XML关键字一起使用。当您指定子查询时,该子查询找到的所有值都将用于透视
它看起来应该像这样:
select xmlserialize(content t.B_XML) from t_aa pivot xml( sum(A) for B in(any) ) t;
您也可以使用子查询代替ANY关键字:
ANY
select xmlserialize(content t.B_XML) from t_aa pivot xml( sum(A) for B in (select cl from t_bb) ) t;
这是一个sqlfiddle演示