2011-11-15 87 views
2

我想產生的結果:使用規則SQL IIF語句連接表的問題

table name: HWData 
policy number:  number of residents: factor: 
100      2      1 
101      4      1.25 
102      7      2 
103      99      2 
104      1      0.85 

table name: Tier_Occupancy 
number of residents: factor: 
1      0.85 
2      1 
3      1.10 
4      1.25 
5      1.5 
6 or above    2.0 

這是我到目前爲止有:

SELECT 
HWData.[Policy Number], 
iif(HWData.[Number of Residents] = 1, Tier_Occupancy.Factor,1), 
iif(HWData.[Number of Residents] = 2, Tier_Occupancy.Factor, 1), 
iif(HWData.[Number of Residents] = 3, Tier_Occupancy.Factor, 1), 
iif(HWData.[Number of Residents] = 4, Tier_Occupancy.Factor, 1), 
iif(HWData.[Number of Residents] = 5, Tier_Occupancy.Factor, 1), 
iif(HWData.[Number of Residents] >= 6, Tier_Occupancy.Factor, 1) 

FROM HWData 
INNER JOIN Tier_Occupancy ON HWData.[Number of Residents]=Tier_Occupancy.[Number of Residents] 

ORDER BY HWData.[Policy Number]; 

我問題是它確實顯示結果,但它顯示1 1 1 1 1 1爲保單號碼100 它顯示1 1 1 1.25 1 1爲保單號碼101,但我不希望這一點:我只想顯示1爲保單號碼100和1.25爲保單號碼101.

我正在使用2007 Microsoft Access的SQL。

+1

什麼版本的SQL具有'iif'功能?它有什麼作用? – Gabe

+0

你的RDBMS是什麼? MS-SQL Server沒有iif作爲函數。它是否是自己的UDF? – Kangkan

+0

對不起,我實際使用2007 Microsoft Access的SQL服務器,如果這對你們任何人都有意義...... – sc1324

回答

2

與此

Tier_Occupancy.Factor 

的加入需要被固定替換此

iif(HWData.[Number of Residents] = 1, Tier_Occupancy.Factor,1), 
iif(HWData.[Number of Residents] = 2, Tier_Occupancy.Factor, 1), 
iif(HWData.[Number of Residents] = 3, Tier_Occupancy.Factor, 1), 
iif(HWData.[Number of Residents] = 4, Tier_Occupancy.Factor, 1), 
iif(HWData.[Number of Residents] = 5, Tier_Occupancy.Factor, 1), 
iif(HWData.[Number of Residents] >= 6, Tier_Occupancy.Factor, 1) 

。這是你需要使用IIF的地方。

ON iif(HWData.[Number of Residents]>5,6,HWData.[Number of Residents]) = Tier_Occupancy.[Number of Residents] 

,並在進入該Tier_Occupancy表的最後一個「的居民數」的最後一個條目刪除「或以上」。這應該是一個數字列。

此外,不要忘記選擇居民列的數量,因爲你說你想要的結果。

+0

不會解決連接問題。 –

+0

爲什麼不呢?我將這個值限制爲不大於6. –

+0

是的,現在你做了。 –

1
SELECT 
HWData.[Policy Number], 
    (select top 1 Tier_Occupancy.Factor from Tier_Occupancy 
    where Tier_Occupancy.[Number of Residents] <= HWData.[Number of Residents] 
    order by Tier_Occupancy.[Number of Residents] desc) as factor 
FROM HWData 

ORDER BY HWData.[Policy Number];