如何在1个sql中从XMLTYPE字段进行多个聚合?
下面是存储在数据类型为XMLTYPE的字段调用xmldoc中的xml数据,模式存储在每个记录中 xmldoc字段的第一行记录应为:如何在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> <
<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