我想产生以下结果:
Table: [0070 Home Age Factor]
Policy Number: Home Age: Home Age Factor:
100 31 1.1
101 35 1.1
102 42 1.15
根据以下规则:
Table: [Factor_HomeAge]
Home Age: Factor:
New Construction 0.800
1 to 5 years old 0.850
6 to 10 years old 0.900
11 to 15 years old 0.950
16 to 20 years old 1.000
21 to 30 years old 1.050
31 to 40 years old 1.100
over 40 years old 1.150
这是我到目前为止所做的:
SELECT HWData.[Policy Number]
, (DATEPART("YYYY", HWData.[Effective Date]) -
HWData.[Year Built]) AS [Home Age]
, Factor_HomeAge.Factor
FROM [0070 Home Age Factor]
INNER JOIN Factor_HomeAge ON iif([0070 Home Age Factor].[Home Age] > 41, 41
, [0070 Home Age Factor].[Home Age]) = Factor_HomeAge.[Home Age]
ORDER BY HWData.[Policy Number];
但它不会产生我想要的结果,任何人都可以帮忙吗?我认为我的内部连接部分不正确。我想使用表Factor_HomeAge
来产生欲望结果。
答案 0 :(得分:4)
根据您的模型和业务规则的灵活性,可以考虑采用几种方法。
UPDATE Factor_HomeAge SET Factor = <value> WHERE Home_Age BETWEEN <min> and <max>;
可以更轻松地进行维护。如果您想要保留历史记录,还可以包括有效和过期日期。 Floor_Age
和Ceiling_Age
。它不像以前的解决方案那样灵活,因为给定因子的范围可能会随着时间的推移而扩展和/或崩溃。这使得维护变得更加困难,尤其是在桌面上没有有效/过期日期的情况下。你的JOIN表现得更像CROSS JOIN,因为你会J OIN Home and Factor_HomeAge ON Home.Age BETWEEN Factor_HomeAge.Floor_Age and Factor_Home.Ceiling_Age
。希望这有帮助。