2010-08-22 58 views
2

假設wagetable:選擇薪水最高

name  lowhours highhours wage 
Default 0.0  40.0  100 
Default 40.0  50.0  150 
Default 50.0  70.5  154 
Default 70.5  100.0  200 
Brian 0.0  40.0  200 
Brian 40.0  50.0  250 
Brian 50.0  60.0  275 
Brian 60.0  70.0  300 
Brian 70.0  80.0  325 
Brian 80.0  9999.0  350 
Chad  0.0  40.0  130 
Chad  40.0  9999.0  170 
我目前使用此代碼

(的AutoIt腳本:

func getCurrentWage($Employee, $Hour_number) 
    Dim $row 
    Local $Wage = 0 
    Local $Found = "found" 
    _SQLite_QuerySingleRow(-1, "SELECT wage FROM wagetable WHERE name LIKE " & _SQLite_Escape($Employee) & " AND " & _SQLite_Escape($Hour_number) & " BETWEEN lowhours AND highhours;", $row) 
    if @error then 
     _SQLite_QuerySingleRow(-1, "SELECT wage FROM wagetable WHERE name LIKE 'Default' AND " & _SQLite_Escape($Hour_number) & " BETWEEN lowhours AND highhours;", $row) 
     $Found = "not found" 
    endif 

    If ($row[0] == "") Then Msgbox(0,0,"Error getCurrentWage") 
    $Wage = $row[0] 

    Debug("Wage='" & $Wage & "' because " &$Employee&" was "& $Found& " -- and Hours Elapsed is " & $Hour_number, true) 
    return $Wage 
EndFunc 

因此,那些2個查詢是完美的,如果該Hour_number是其間的低小時 我需要某種查詢,它基本上會做類似這樣的事情:

SELECT wage from wagetable WHERE name LIKE $Employee AND max(highhours) 

然後只是重複它的'默認'是僱員找不到。

額外:如果只有1個查詢沒有找到$ Employee,是否可以嘗試'默認'?

回答

1

如果只有1個查詢沒有找到$ Employee,是否可以嘗試'Default'?

SELECT name, wage, highhours 
    FROM wagetable 
    WHERE name like 'Brian' OR 
     name like 'Default' 
ORDER BY name, 
     highhours desc 

該查詢查詢時爲Brian,但它適用於任何名稱的Default工作應存儲在數據庫中開始以特殊字符[email protected],因爲數字和字母來首次在分揀工作。

另一種方法是,爲您打造另一列表中,爲我們的說法,叫做priority的緣故,其應具有Default1價值0任何其他用戶。然後,你可以簡單地做:

SELECT name, wage, highhours 
    FROM wagetable 
    WHERE name like 'Brian' OR 
     name like 'Default' 
ORDER BY priority desc, 
     highhours desc 

當然是同一個解決方案,但它是一個更好的辦法,不是依靠默認值的名稱的特殊字符。

+0

感謝您的詳細解答。我會優先考慮,因爲這個過程似乎最簡單。 – ParoX 2010-08-22 02:19:13

+1

當然不需要新的列。 '如果name ='default'則按ORDER BY CASEEN THEN 1 ELSE 0 END DESC,highhours desc'會做同樣的事情嗎? – 2010-08-22 02:27:33

+1

@Martin非常好。我認爲在表初始化時,在開始時設置1或0會更容易,而不是在每個查詢上運行if else。我確信性能差異很小,但我會在1秒內運行這個查詢3-4次 – ParoX 2010-08-22 02:32:28