我有一个excel函数:=Max(0, -Min(A1-B1, C1-B1))
和 A1,B1,C1 是表中的 Value 列:
日期、键、值
现在假设日期无关紧要,A1,B1,C1 的密钥是 A,B,C
如何实现这个excel函数?我最初这样做的方式是我有两个连接(在同一行的不同列中获取所有值),但这似乎有点矫枉过正,必须有更聪明的方法吗?
我有一个excel函数:=Max(0, -Min(A1-B1, C1-B1))
和 A1,B1,C1 是表中的 Value 列:
日期、键、值
现在假设日期无关紧要,A1,B1,C1 的密钥是 A,B,C
如何实现这个excel函数?我最初这样做的方式是我有两个连接(在同一行的不同列中获取所有值),但这似乎有点矫枉过正,必须有更聪明的方法吗?
您可能可以将其减少为一个连接,因为您只需要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'
您的问题是为每一行建议一个单独的值。如果是这样,那么这是查询:
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() 函数,这样的公式可能更容易创建。