соответствие возрастных факторов дома SQL - PullRequest
1 голос
/ 16 ноября 2011

Я хочу получить следующий результат:

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 для получения желаемых результатов.

1 Ответ

4 голосов
/ 16 ноября 2011

Думая, что есть несколько способов сделать это в зависимости от гибкости вашей модели и бизнес-правил.

  1. Home_Age должен перечислять каждый год от 0 до 100+ с соответствующим значением фактора.Если ваши бизнес-правила меняются, а коэффициент в течение ряда лет должен меняться, его будет проще поддерживать с помощью простого UPDATE Factor_HomeAge SET Factor = <value> WHERE Home_Age BETWEEN <min> and <max>; Вы также можете указать даты вступления в силу и истечения срока действия, если хотите сохранить историю.
  2. Разделите Home_Age на два столбца: 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.

Надеюсь, это поможет.

...