Заменить IIf на SWITCH в предложении WHERE
У меня есть следующий запрос в MS-Access 2003, и он работает нормально:
SELECT tblDiscounts.DiscountID, tblDiscounts.DiscountPercent, tblDiscounts.DiscountName, tblDiscounts.DiscountDescription
FROM tblDiscounts, qryPropertyPeriodRate_Count_Nested
WHERE (tblDiscounts.DiscountID) = IIf ([qryPropertyPeriodRate_Count_Nested].[CountOfWeeks]=1,1,IIf([qryPropertyPeriodRate_Count_Nested].[CountOfWeeks]=2,2,IIf([qryPropertyPeriodRate_Count_Nested].[CountOfWeeks]=3,3,4)));
Я хочу заменить функцию IIf на функцию Switch, но все, что я пробовал, не сработало. Мой лучший подход заключается в следующем:
SELECT tblDiscounts.DiscountID, tblDiscounts.DiscountPercent, tblDiscounts.DiscountName, tblDiscounts.DiscountDescription
FROM tblDiscounts, qryPropertyPeriodRate_Count_Nested
WHERE (((tblDiscounts.DiscountID)=SWITCH ([qryPropertyPeriodRate_Count_Nested].[CountOfWeeks]=1,1, [qryPropertyPeriodRate_Count_Nested].[CountOfWeeks]=2,2, [qryPropertyPeriodRate_Count_Nested].[CountOfWeeks]=3,3, [qryPropertyPeriodRate_Count_Nested].[CountOfWeeks]>3,4)));
но я получаю сообщение
Несоответствие типов в выражении
Пожалуйста, порекомендуйте!
1 ответ
Я вижу одно отличие в том, что если [qryPropertyPeriodRate_Count_Nested].[CountOfWeeks]<1
вложенный IIf
с вернется 4
в то время как Switch
заявление вернется Null
, Проверьте ваши основные данные, чтобы увидеть, может ли это произойти; Null
Значение вполне может испортить предложение WHERE.