Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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
如何在1个sql中从XMLTYPE字段进行多个聚合?_Sql_Xml_Database_Oracle - Fatal编程技术网

如何在1个sql中从XMLTYPE字段进行多个聚合?

如何在1个sql中从XMLTYPE字段进行多个聚合?,sql,xml,database,oracle,Sql,Xml,Database,Oracle,下面是存储在数据类型为XMLTYPE的字段调用xmldoc中的xml数据,模式存储在每个记录中 xmldoc字段的第一行记录应为: <cdata> <r> <year>2009</year> <month>Jan</month> <day>1</day> <data>1180</data> </r> </cdata> <cdata> <

下面是存储在数据类型为XMLTYPE的字段调用xmldoc中的xml数据,模式存储在每个记录中

xmldoc字段的第一行记录应为:

<cdata>
<r> <year>2009</year>
<month>Jan</month>
<day>1</day>
<data>1180</data>
</r>
</cdata>
<cdata>
<r>
<year>2009</year>
<month>Jan</month>
<day>2</day>
<data>1280</data>
</r>
</cdata>
按x年、x月订购

我可以从这个sql中获得每年每个月的“数据”总和,我想知道的问题是,如何在列callth之后显示每年的总和,只需修改这个sql,而不使用两个或多个sql同时获得月和年的聚合

输出可能如下所示:

year month  sumMonth sumYear
2009  Jan    3840     10680
2009  Feb    6840     10680
2010  Jan    3843     10686
2010  Feb    6843     10686
谢谢大家给了我答案:

你可以使用:


谢谢您的回复,但它返回了一个错误代码:[SQL错误:没有更多的数据可从套接字读取]…有没有办法修复它?这看起来像是一个I/O错误,而不是一个查询错误。如果将xmltest替换为简单的东西(如SELECT XMLTYPE'2009Jan11180'xmldoc FROM dual),是否会收到相同的错误消息?
SELECT X.year, x.month, sum(x.data) as sumMonth
FROM xmltest, 
XMLTABLE ('$d/cdata/r' passing xmldoc as "d" 
   COLUMNS 
  year integer path 'year',
  month varchar(3) path 'month',
  day varchar(2) path 'day',
  data float path 'data'
  ) AS X
group by x.year, x.month
year month  sumMonth sumYear
2009  Jan    3840     10680
2009  Feb    6840     10680
2010  Jan    3843     10686
2010  Feb    6843     10686
SELECT v.YEAR, v.MONTH, v.sumMonth, 
       SUM(v.sumMonth) over(PARTITION BY v.YEAR) sumYear
  FROM (SELECT X.YEAR, x.MONTH, SUM(x.data) AS sumMonth
           FROM xmltest,
                XMLTABLE('$d/cdata/r' passing xmldoc AS "d" 
                  COLUMNS YEAR INTEGER path 'year',
                          MONTH VARCHAR(3) path 'month',
                          DAY VARCHAR(2) path 'day',
                          data FLOAT path 'data') AS X
          GROUP BY x.YEAR, x.MONTH) v