2011-11-15 4 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]; 

マイ質問は結果を表示していますが、ポリシー番号100の1 1 1 1 1 1と表示されています と表示されています1 1 1 1.25 1 1のポリシー番号101が必要ですが、ポリシー番号100に1を、ポリシー番号101に1.25を表示したいだけです。

私は2007 Microsoft AccessのSQLを使用しています。

+1

どのバージョンのSQLに 'iif'機能がありますか?それは何をするためのものか? – Gabe

+0

RDBMSとは何ですか? MS-SQL Serverには関数としてiifはありません。それはyiur自身の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を使用する必要がある場所です。

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];