Ваш вопрос предполагает отдельное значение для каждой строки. Если это так, то это запрос:
select t.*
(case when -leastval < 0 then 0
else -lesatval
end) as TheValue
end
from (select t.*,
(case when A1 - B1 < C1 and A1 - B2 < B1 then A1 - B1
when C1 < B1 then C1
else B1
end) as leastval
from table t
) t
Теперь, когда я прочитал вопрос правильно, позвольте мне предположить, что существует одно значение A, B и C в день. Затем вы должны использовать вариант выше, просто сначала деноматизируя данные:
select t.*
(case when -leastval < 0 then 0
else -leastval
end) as TheValue
end
from (select t.*,
(case when A - B < C and A - B < B then A - B
when C < B then C
else B
end) as leastval
from (select date,
min(case when key = 'A' then value end) as A,
min(case when key = 'B' then value end) as B,
min(case when key = 'C' then value end) as C
from table t
group by date
) t
) t
Есть и другие способы сформулировать это. Я старался оставаться достаточно близко к формулировке Excel.
Кстати, некоторые другие базы данных предлагают функции Greatest() и Least(), которые могут создать такую формулу намного проще.
И что случилось с решением двух соединений? – Andomar
Мне нужно будет добавить некоторые критерии отбора (через другое соединение) для каждого из этих объединений, в итоге мне будет около 5 объединений! – mezamorphic