2010-12-13 47 views
1

嗨我期待在訪問運行該查詢/計算領域,繼承人是我想做的事:如何運行此訪問查詢?

If(Salaries.Amount > 20000) { 
    If(Salaries.Amount > 30000) { 
     If(Salaries.Amount > 40000) { 
      Permits.Band = "Band 4"; 
     } Else { 
      Permits.Band = "Band 3"; 
     } 
    } Else { 
     Permits.Band = "Band 2"; 
    } 
} Else { 
    Permits.Band = "Band 1"; 
} 

工資和許可證的表格,另有2個表中的DB - 汽車和工作人員。

Salaries/Staff are linked by Staff_ID: 1 to 1, 
Staff/Permits are linked by Staff_ID: 1 to 1, 
Permits/Cars are linked by Permit_ID: 1 to M. 

基本上需要允許「帶」字段根據工作人員的工資來計算的......薪水一定是從員工的細節一個單獨的表,因此,工資表...

任何想法?

編輯:

在回答回答1:運行時

SELECT Switch(Salaries.Amount > 40000, "Band 4", 
       Salaries.Amount > 30000, "Band 3", 
       Salaries.Amount > 20000, "Band 2", 
       True, "Band 1") AS Band 
FROM (Staff INNER JOIN (Permits INNER JOIN Cars ON Permits.Perm_ID = Cars.Perm_ID) ON Staff.Staff_ID = Permits.Staff_ID) INNER JOIN Salaries ON Staff.Staff_ID = Salaries.Staff_ID;

賦予 「表達式類型不匹配」 ...的切換功能

回答

4

見檢索幫助主題。

開關(表達式-1,值-1 [,EXPR-2,值-2 ​​... [,EXPR-n中,值N]])

「的計算公式是由左到評價正確,並返回與第一個表達式相關聯的值以評估爲True。「

SELECT Switch(Salaries.Amount > 40000, "Band 4", 
       Salaries.Amount > 30000, "Band 3", 
       Salaries.Amount > 20000, "Band 2", 
       True, "Band 1") AS band 
FROM [your tables expression]; 

更新:我製造和測試針對工資表,其中金額字段是數字數據類型的switch語句。除非您的金額字段不是數字,否則我會檢查您的FROM子句。這個查詢是否運行沒有錯誤?

SELECT * 
FROM (Staff INNER JOIN (Permits INNER JOIN Cars 
    ON Permits.Perm_ID = Cars.Perm_ID) ON Staff.Staff_ID = Permits.Staff_ID) 
    INNER JOIN Salaries ON Staff.Staff_ID = Salaries.Staff_ID; 
+0

謝謝!編輯是否需要什麼?謝謝 – 2010-12-13 22:31:47

+0

@Chris我不知道爲什麼你會得到「類型不匹配」。看看我的更新是否會產生線索。 – HansUp 2010-12-14 00:33:51

+0

運行該更新時再次出現... :( – 2010-12-14 10:30:45

2

如果你想要一些硬編碼的東西,你可以把樂隊放在一個新的表格中(列:id/name,lower,upper)。

最低「低」應爲零,每個後續「低」應該完全等於先前的「上」,並且最後的「上」應該是一個巨大的數字來代表無窮大。

然後加入這樣的事情:

select whatever 
from salaries s 
inner join band b on b.lower <= s.amount and b.upper > s.amount 

如果salaries.amount可以爲空,那麼你將不得不使用一個左外連接和專門處理這種情況。