У меня есть набор данных, для которого я хочу суммировать значения по категориям (элементам), однако, прежде чем суммировать их вместе, мне нужно преобразовать валюту некоторых значений, зависящих от валюты в другом столбце.
Пример набора данных:
Item Currency Value
1 USD 10
1 PHP 100
2 USD 50
2 PHP 1000
3 PHP 500
select ITEM,
(case when CURRENCY='usd' then sum(VALUE*2) else sum(VALUE) end ) VALUE
from TABLE1
inner join TABLE2 on TABLE1.ID=TABLE2.ID
inner join TABLE3 on TABLE3.X=TABLE1.X
inner join TABLE4 on TABLE1.Y=TABLE4.Y
where A=1 and B=2 and C=5
group by ITEM, CURRENCY
ORDER BY ITEM asc
Желаемый результат (используя x2 в качестве коэффициента для перехода от долларов США к PHP):
Item Value
1 120
2 1100
3 500
Однако я получаю следующее, которое правильно преобразовало валюту, но не группирует по элементам (т.е. я получаю дублированные строки для элемента, а не 1 строку с суммированным значением):
Item Value
1 20
1 100
2 100
2 1000
3 500
case
должен быть аргументом для SUM()
:
select ITEM,
sum(case when CURRENCY='usd' then VALUE*2 else VALUE
end ) as VALUE
from TABLE1 join
TABLE2
on TABLE1.ID = TABLE2.ID join
TABLE3
on TABLE3.X = TABLE1.X join
TABLE4
on TABLE1.Y = TABLE4.Y
where A = 1 and B = 2 and C = 5
group by ITEM
ORDER BY ITEM asc;
Примечание. GROUP BY
— это только ITEM
, потому что это определяет строки, которые вы хотите получить в результирующем наборе.
@TimBiegeleisen . . . VALUES
— ключевое слово; VALUE
обычно нет.
Привет, Гордон, обратите внимание, что
VALUE
, если на самом деле это имя столбца, может потребовать экранирования в нескольких вариантах SQL, поскольку это ключевое слово.