У меня есть хранилище данных, в котором запрос SELECT (и SUM) имеет следующий результат:
+------+-----------+-------------+------------+
| YEAR | ITEM TYPE | TOTAL_ITEMS | TOTAL_COST |
+------+-----------+-------------+------------+
| 2009 | TYPE-1 | 19 | 330 |
| 2009 | TYPE-2 | 1 | 10 |
| 2009 | TYPE-3 | 11 | 190 |
| 2010 | TYPE-1 | 11 | 220 |
| 2010 | TYPE-2 | 7 | 230 |
| 2010 | TYPE-3 | 3 | 360 |
+------+-----------+-------------+------------+
Мой вопрос заключается в том, как создать новый столбец, в котором будет рассчитываться общая разница в затратах между 2009 и 2010 гг.(где 2009 - это основа) в процентах.
Таким образом, результат будет примерно таким:
+------+-----------+-------------+------------+----------+----------+
| YEAR | ITEM TYPE | TOTAL_ITEMS | TOTAL_COST | ItemDiff | CostDiff |
+------+-----------+-------------+------------+----------+----------+
| 2009 | TYPE-1 | 19 | 330 | 0% | 0 |
| 2009 | TYPE-2 | 1 | 10 | 0% | 0 |
| 2009 | TYPE-3 | 11 | 190 | 0% | 0 |
| 2010 | TYPE-1 | 11 | 220 | -42.11% | -33.33% |
| 2010 | TYPE-2 | 7 | 230 | 1000% | 2200% |
| 2010 | TYPE-3 | 3 | 360 | -72.73% | 80.47% |
+------+-----------+-------------+------------+----------+----------+
ТИП ПУНКТА - это категория, которая состоит из нескольких предметов с разными ценами.,Мне нужно рассчитывать изменения по категориям, а не по пунктам.
Запрос, который я получил до сих пор:
SELECT
date_dim.year,
item_dim.item_type,
SUM(fact.total_item)TotalItems,
SUM(fact.total_cost) AS TotalCost
FROM fact
INNER JOIN date_dim
ON fact.date_key = date_dim.date_key
INNER JOIN item_dim
ON fact.item_key = item_dim.item_key
WHERE date_dim.year BETWEEN 2009 AND 2011
GROUP BY date_dim.year,
item_dim.item_type
Пожалуйста, посмотрите на следующую скрипку, где схема и запрос уже построены.
http://sqlfiddle.com/#!9/8e53c0/2
Вот упрощенная ERD ...
ERD
Спасибозаранее за любую помощь ...