Warm tip: This article is reproduced from serverfault.com, please click

其他-Oracle SQL中的动态数据透视

(其他 - Dynamic pivot in oracle sql)

发布于 2013-03-19 04:46:16

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

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

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

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

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

Questioner
prabhakar
Viewed
22
A.B.Cade 2013-03-19 13:58:55

你不能将非常量字符串放在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演示