哇!我看到這樣做太簡單了: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