как добраться домой лет от sql - PullRequest
0 голосов
/ 16 ноября 2011

Я хочу получить результат:

Table: HWData
Effective Date:        Year Built:    Home Age:     Home Age Factor:
10/8/2011               1980           31              1.1

Из приведенных ниже правил:

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.[Effective Date],
   HWData.[Year Built],
   EXTRACT(YEAR FROM [Effective Date]) - HWData.[Year Built] AS Home Age, 
   iif(HWData.[Home Age] = 0, 0.8,
   iif(HWData.[Home Age] <= 5, 0.85,
   iif(HWData.[Home Age] <= 10, 0.9,
   iif(HWData.[Home Age] <= 15, 0.95,
   iif(HWData.[Home Age] <= 20, 1,
   iif(HWData.[Home Age] <= 30, 1.05,
   iif(HWData.[Home Age] <= 40, 1.1,
   iif(HWData.[Home Age] > 40, 1.15,
   0)))))))) AS [Home Age Factor]
FROM HWData 
INNER JOIN Factor_HomeAge
   ON HWData.[Policy Number] = Factor_HomeAge.[Policy Number]

Но целые коды sql просто не запускаются. Есть ли прямой способ получить домашние годы?

Я думаю, что внутреннее соединение также неверно, так как нет имени столбца Factor_HomeAge. [Номер политики].

1 Ответ

1 голос
/ 16 ноября 2011

Вместо EXTRACT(YEAR FROM [Effective Date]) Доступ имеет функцию DATEPART.Вы захотите использовать:

DATEPART("YYYY", [Effective Date])

Я также заметил ваше первое IIF() утверждение: iif(HWData.[Home Age] = 0, 0.8,

Если вы разрешите частичные значения года для возраста домаВы можете изменить запрос на:

iif(HWData.[Home Age] < 1, 0.8,, чтобы учесть дома, которым меньше одного года.

...