哇!我看到这样做太简单了:Max(Field-Constant1,Constant2)
。
我的目标:根据只有一个字段计算一个值,但不要让计算值小于常数。上的两个场表
Expample行(关键字段,ValueField):
1 10
2 5
3 8
4 Null
我想选择返回时(当CONSTANT1 = 6和CONSTANT2 = 1)中,i把整个数学澄清它(只有最后=后最顶部的右边是我想要什么):
1 Max(10-6,1)=Max(4,1)=4
2 Max(5-6,1)=Max(-1,1)=1
3 Max(8-6,1)=Max(2,1)=1
4 Max(Null-6,1)=Max(Null,1)=Null
,所以我只是想(当万一CONSTANT1 = 6,CONSTANT2 = 1),它是不够清楚:
1 4
2 1
3 1
4 Null
小心那个空。
我真的想要一些更复杂的东西,但解决方案,我将能够解决我想要的复杂。
可以恢复为: -return NULL,如果值为null或不使用的数学运算符的有效值(未八方通只是一个 - 或+等) -return计算出的值,如果它是可能做数学,但限于一个范围(不小于一个值,不大于另一个值)。
如果我这样做对伪代码就会像这样:
try // try to do the maths
MyCalculatedValue=SomeMaths(FieldValue);
MyCalculatedValue=Min(Max(MyCalculatedValue,MinValue),MaxValue);
except // In case the SomeMaths can not be done (FieldValue is Null, negative square, division by zero, etc)
MyCalculatedValue=Null;
end;
return MyCalculatedValue;
万一有人说数据库不归:我想要做一些数学的领域,然后限制的结果一个范围;所以最小的样本数据库将只有一个只有两个字段(唯一键字段,数据字段)的表,这是不可能完全标准化的;我不是在谈论连续的某些字段的最大值,也不是一个字段上的全表(聚合函数)的最大值,只是我只想给计算值设置一个下限和一个上限,但考虑Null时这样的值是空值或者要做的数学运算不能完成(例如Constant1 /(FieldValue-Constant2)等)。以防万一有人
实际样品没有得到何时能使用:
表字段:
ID (Key)
SpacePosition (DecimalData)
的查询期望的结果字段:
ID as ID
Min(Max(SpacePosition-SomeSpaceLongitud,StartPosition),EndPosition) AS RangeStart
Min(Max(SpacePosition+SomeSpaceLongitud,StartPosition),EndPosition) AS RangeEnd
希望样本清楚,并希望有人可以帮助,比使用VBA功能更容易!
P.D .:认为这样的数学不仅仅是+和 - 更复杂,而且表格有很多,寄存器数量多于几个,在几十亿个寄存器附近考虑。 P.P.D .:对这种结果进行硬编码不是一种选择,因为它不是标准化的数据库,也不是最差的,这种范围限制是用户在运行查询时键入的值。
您确定此表已标准化(http://www.r937.com/relational.html)吗? – Fionnuala 2009-10-27 14:20:31
我认为我们可以肯定地打赌,正常化问题的答案是什么! – 2009-10-27 20:45:31