我有一个excel函数:= Max(0,-Min(A1-B1,C1-B1))
和A1,B1,C1是表格中的Value列:
日期,关键,价值
现在假设日期无关紧要,关键是A1,B1,C1的A,B,C
如何实现此Excel功能?我最初这样做的方式我有两个连接(将值全部放在同一行的不同列中)但是这看起来有点矫枉过正,必须有一个更聪明的方法?
答案 0 :(得分:2)
您可以将其缩减为一个加入,因为B
部分只需要A
:
select case
when min(Value - isnull(yt2.Value,0)) > 0 then 0
else -min(Value - isnull(yt2.Value,0))
end
from YourTable yt1
join YourTable yt2
on yt1.Key = 'A' and yt2.key = 'B'
or
yt1.Key = 'B' and yt2.key = 'C'
答案 1 :(得分:1)
您的问题是建议每行都有一个单独的值。如果是,那么这就是查询:
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()函数,这些函数可以更容易创建。