Заменить 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.

Другие вопросы по тегам