2010-08-22 76 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