2009-02-04 56 views
0

我想執行一個簡單的計算,從SQL Server返回的一些數據:SQL語法計算返回數據的結果

SELECT val1X, val1Y, val2X, val2Y FROM myTable 

我希望能夠計算根據返回值以下,就回到一個單一的值 - 下面的計算結果(這是最初寫在VB6):

If IsNull(val1X) Or IsEmpty(val1X) Then val1X = 0 
    If IsNull(val1Y) Or IsEmpty(val1Y) Then val1Y = 0 
    If IsNull(val2X) Or IsEmpty(val2X) Then val2X = 0 
    If IsNull(val2Y) Or IsEmpty(val2Y) Then val2Y = 0 

    res1 = (val1X^2) + (val1Y^2) 
    res2 = (val2X^2) + (val2Y^2) 

    ResultVal = Sqr(IIf(res1 > res2, res1, res2)) 

只是想知道什麼是最好的方式來做到這一點?

感謝

回答

3

你可以做到這一切在SQL一個語句,而是因爲你有重複的塊,它看起來有點醜:

SELECT 
    CASE WHEN 
    /* res1 */ Power(IsNull(val1X, 0), 2) + Power(IsNull(val1Y, 0), 2) 
    > /* res2 */ Power(IsNull(val2X, 0), 2) + Power(IsNull(val2Y, 0), 2) 
    THEN 
    /* res1 */ Power(IsNull(val1X, 0), 2) + Power(IsNull(val1Y, 0), 2) 
    ELSE 
    /* res2 */ Power(IsNull(val2X, 0), 2) + Power(IsNull(val2Y, 0), 2) 
    END 
FROM 
    myTable 

它會是一個少許清潔劑使用用戶 - 定義的函數來包裝這個Power(IsNull(field,0),2),所以你不會重複你自己,但是我會把它作爲一個練習讓你去做。 :)

+0

這很好,謝謝。只是最後一個問題,我如何爲此指定列名? – Belliez 2009-02-04 16:11:30