小编典典

Oracle SQL中的动态数据透视

sql

…枢轴((X)中B的总和(A))

现在,B的数据类型为varchar2,X为一串由逗号分隔的varchar2值。
X的值是从同一表的列(例如CL)中选择不同的值。这种枢轴查询工作的方式。

但是问题是,每当CL列中有一个新值时,我都必须手动将其添加到字符串X中。

我尝试用从CL选择不同的值替换X。但是查询未运行。
我感觉到的原因是因为要替换X,我们需要用逗号分隔的值。
然后,我创建了一个函数以返回确切的输出以与字符串X匹配。但是查询仍然无法运行。
显示的错误消息如“缺少righr异常状态”,“文件通信通道结束”等。
我尝试了透视xml,而不仅仅是透视,查询运行了,但给出了像oraxxx这样的vlaues,它们根本没有任何值。

也许我没有正确使用它。
您能告诉我一些方法来创建具有动态值的枢轴吗?


阅读 181

收藏
2021-05-05

共1个答案

小编典典

您不能将非常量字符串放在INivot子句的子句中。
您可以为此使用数据透视XML。

文档

子查询子查询仅与XML关键字一起使用。当您指定子查询时,该子查询找到的所有值都将用于透视

它看起来应该像这样:

select xmlserialize(content t.B_XML) from t_aa
pivot xml(
sum(A) for B in(any)
) t;

您也可以使用子查询代替ANY关键字:

select xmlserialize(content t.B_XML) from t_aa
pivot xml(
sum(A) for B in (select cl from t_bb)
) t;

这是一个sqlfiddle演示

2021-05-05