Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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
Sql 将pivot中的XML列数据显示为单个列_Sql_Xml_Oracle_Pivot - Fatal编程技术网

Sql 将pivot中的XML列数据显示为单个列

Sql 将pivot中的XML列数据显示为单个列,sql,xml,oracle,pivot,Sql,Xml,Oracle,Pivot,我有一张结构化的桌子 列:年月日、科目id、科目名称、收入 我希望将数据透视到表中,使其显示为 列:科目id、科目名称、月份yyyy1(收入)、月份yyyy2(收入)。。。月(收入) 我这样做了 select * from ( SELECT month_yyyy, account_id, account_name, revenue FROM table order by to_date(month_yyyy, 'month yyyy'

我有一张结构化的桌子

列:年月日、科目id、科目名称、收入

我希望将数据透视到表中,使其显示为

列:科目id、科目名称、月份yyyy1(收入)、月份yyyy2(收入)。。。月(收入)

我这样做了

    select * from ( 
SELECT month_yyyy,
       account_id,
       account_name,
       revenue
  FROM table
   order by to_date(month_yyyy, 'month yyyy')
)
pivot xml(
    sum (revenue) as revenue for (month_yyyy) in (select distinct month_yyyy from table) 
  ) 
order by account_name;
这将提供数据,如数据透视xml列

<PivotSet><item><column name = "MONTH_YYYY">April 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">August 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">December 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">Decmber 2011</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">February 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">February 2013</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">January 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">January 2013</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">July 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">June 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">March 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">March 2013</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">May 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">November 2011</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">November 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">October 2012</column><column name = "REVENUE">0</column></item><item><column name = "MONTH_YYYY">September 2012</column><column name = "REVENUE">0</column></item></PivotSet>
20120年4月20120年8月20120年12月20110年12月20120年2月20130年1月20130年7月20120年6月20120年3月20120年3月20120年11月20110年11月20120年10月20120年9月20120
如何创建一个视图,按月选择xml列数据并将其显示为单独的列?我想实现,

帐户id、帐户名称、月份yyyy1(收入)、月份yyyy2(收入)。。。月(收入)


感谢您提供的任何帮助,如果需要更多信息,请告诉我。

您似乎无法在in子句中使用带有select的透视

在sqlfiddle上,您需要给出一个值列表以作为重点。也许您可以使用pl/sql函数将结果列转换为逗号分隔的列表,但不确定pivot是否可以使用该列表

create table tab
( month_yyyy varchar2(20)
, account_id number
, account_name varchar2(20)
, revenue number
);

insert into tab values ('januari_2013', 1, 'acc one', 10);
insert into tab values ('januari_2013', 2, 'acc two', 20);
insert into tab values ('februari_2013', 1, 'acc one', 100);
insert into tab values ('februari_2013', 2, 'acc two', 200);
insert into tab values ('march_2013', 1, 'acc one', 1000);
insert into tab values ('march_2013', 2, 'acc two', 2000);

select *
from   tab
-- this does not work: pivot ( sum(revenue) FOR month_yyyy IN (select distinct month_yyyy from tab) )
-- this works:
pivot ( sum(revenue) FOR month_yyyy IN ('januari_2013', 'februari_2013', 'march_2013') )

谢谢你的帮助。我找到了解决问题的另一种方法。您可以在“选择”视图中使用轴,请参见。