Ниже приведены данные xml, хранящиеся в вызове поля xmldoc с типом данных XMLTYPE, а шаблон хранится в каждой записи.
Первая строка (запись) поля xmldoc должна быть:
<cdata>
<r> <year>2009</year>
<month>Jan</month>
<day>1</day>
<data>1180</data>
</r>
</cdata>
, а вторая строка поля xmldoc должна быть:
<cdata>
<r>
<year>2009</year>
<month>Jan</month>
<day>2</day>
<data>1280</data>
</r>
</cdata>
, а приведенные ниже данные xml также модифицируются в верхнем примере (все данные сохраняются в записи строки в поле xmldoc и внедряютсякорневой элемент 'cdata'.)
<r>
<year>2009</year>
<month>Jan</month>
<day>3</day>
<data>1380</data>
</r>
<r>
<year>2009</year>
<month>Feb</month>
<day>1</day>
<data>2180</data>
</r>
<r>
<year>2009</year>
<month>Feb</month>
<day>2</day>
<data>2280</data>
</r>
<r>
<year>2009</year>
<month>Feb</month>
<day>3</day>
<data>2380</data>
</r>
<r>
<year>2010</year>
<month>Jan</month>
<day>1</day>
<data>1181</data>
</r>
<r>
<year>2010</year>
<month>Jan</month>
<day>2</day>
<data>1281</data>
</r>
<r>
<year>2010</year>
<month>Jan</month>
<day>3</day>
<data>1381</data>
</r>
<r>
<year>2010</year>
<month>Feb</month>
<day>1</day>
<data>2181</data>
</r>
<r>
<year>2010</year>
<month>Feb</month>
<day>2</day>
<data>2281</data>
</r>
<r>
<year>2010</year>
<month>Feb</month>
<day>3</day>
<data>2381</data>
</r>
Теперь я использую этот sql:
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
заказ по x.year, x.month
я могуполучить сумму «данных» за каждый месяц каждого года из этого sql, и вопрос, который я хотел бы знать, состоит в том, как отобразить сумму каждого года после столбца sumMonth и просто изменить этот sql, но не использовать два илибольше sql , чтобы получить агрегацию по месяцу и году в одно и то же время.
вывод может быть таким:
year month sumMonth sumYear
2009 Jan 3840 10680
2009 Feb 6840 10680
2010 Jan 3843 10686
2010 Feb 6843 10686
спасибо, что все дали мне ответ:)