В зависимости от того, что именно вы можете сделать, вы можете сделать что-то вроде этого, чтобы получить сумму в январе 2009 года
SELECT SUM( x.data )
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
WHERE x.year = 2009
AND x.month = 'Jan'
и это, чтобы получить сумму за весь 2009 годИспользуя ваши примерные данные и предполагая, что таблица определена как
CREATE TABLE xmltest (
xmldoc XMLTYPE
);
, выдает результат, подобный этому
SQL> ed
Wrote file afiedt.buf
1 SELECT SUM( x.data )
2 FROM xmltest,
3 XMLTABLE ('$d/cdata/r' passing xmldoc as "d"
4 COLUMNS
5 year integer path 'year',
6 month varchar(3) path 'month',
7 day varchar(2) path 'day',
8 data float path 'data'
9 ) AS X
10* WHERE x.year = 2009
SQL> /
SUM(X.DATA)
-----------
10680
и
SQL> SELECT SUM( x.data )
2 FROM xmltest,
3 XMLTABLE ('$d/cdata/r' passing xmldoc as "d"
4 COLUMNS
5 year integer path 'year',
6 month varchar(3) path 'month',
7 day varchar(2) path 'day',
8 data float path 'data'
9 ) AS X
10 WHERE x.year = 2009
11 AND x.month = 'Jan';
SUM(X.DATA)
-----------
3840