Я использую Oracle.SQL Условное агрегирование
Имея таблицу:
Year Type Value
2011 1 500
2011 2 550
2011 3 600
...
...
2012 1 600
2012 2 750
2012 3 930
мне нужно вычесть все значения различных типов, сгруппированных по годам. Операция будет:
В 2011 -> 1-2-3 (500-550-600)
В 2012 -> 1-2-3 (600-750-930)
Для ...
результат Шоуда быть:
Year Value
2011 -650
2012 -1080
... ...
я не мог сделать это, но здесь на переполнение стека, этот запрос был предложен, и она работала:
select sum(case when type = 1 then value else - value end) as value
from table t
group by year;
Но теперь у меня другая ситуация. Мне нужно сделать то же самое, но не 1-2-3-4-5 -... Но 1 + 2-3-4-5-6 ....
К этому я попробовал эти оба запроса , без успеха:
select sum(case when type = 1 then value when type = 2 then value else - value end) as value
from table t
group by year;
Это привело к тому, что второе значение имеет удвоенное значение.
select sum(case when type = 1 then value else - value end)+case when type = 2 then value as value
from table t
group by year;
Это привело к правильному значению типа 2, но, так как этот тип 2 accurs только через несколько лет, в другие годы появляются утратившим. Итак, окончательный расчет правильный для типа 2 (годы, в котором он находится), но для каждого другого года, для каждого типа 2 не существует, он возвращает null.
Я просто не могу заставить этот запрос работать .. Любая идея была бы принята с благодарностью! Thanks
Привет, спасибо для ответа. Разве второй вопрос не совпадает с моей первой попыткой? Он удвоил стоимость. В качестве примера. Значение было 1000, которое должно быть добавлено к 500, в результате получилось 1500. При этом он добавил 2000, являясь итоговым результатом 2500 .. странно .. –
@ valter.vx Это небольшое изменение в синтаксисе, который вы пробовали ,Как я сказал «ради полноты». Однако я не могу объяснить поведение, которое вы наблюдали. Все эти запросы (ваш, мой, JNevill's) должны давать точный результат. На самом деле они сделали это на моей тестовой системе Oracle 11g XE. –