Использование Case в инструкции where с пользовательским вводом

Вопрос:

Я пытаюсь добавить все возможные годовые расходы, но мое деловое выражение не пахнет правильно.

Если я выберу 2013 год, я хочу иметь возможность добавлять все расходы с 2006 года до 2013 года. Есть ли лучший способ сделать это без Case-заявления? или я ошибаюсь.

 SELECT ID, Sum(Amount) As Total
FROM ABCD
WHERE Expenses = 'Actual' AND
AcountType = 'Expense' AND
CASE WHEN 'Myselectionparameter' = 2013
THEN ( YearID =2013 or YearID = 2012 or YearID = 2011 or YearID = 2010 or YearID = 2009 or YearID = 2008  Or YearID = 2007 or YearID = 2006 )
END
GROUP BY ID

Лучший ответ:

Итак, Myselectionparameter является параметром int?

SELECT ID, Sum(Amount) As Total
FROM   abcd 
WHERE  ... 
       AND ( @Myselectionparameter IS NULL 
              OR YearID BETWEEN 2006 AND @Myselectionparameter ) 
GROUP  BY id 

Ответ №1

допустим, что ваш вопрос касался параметра, в таком случае вы используете @перед именем param.

то у вас есть конкретный ответ…

SELECT ID, Sum(Amount) As Total
FROM ABCD
WHERE Expenses = 'Actual' AND
AcountType = 'Expense' AND
(@Myselectionparameter = 2013 AND YearID  BETWEEN 2006 AND 2013)
END
GROUP BY ID

а что, если парам говорит 2011? Вы хотели бы быть с 2006 по 2011 год? в таком случае у вас есть общий ответ:

SELECT ID, Sum(Amount) As Total
FROM ABCD
WHERE Expenses = 'Actual' AND
AcountType = 'Expense' AND
YearID  BETWEEN 2006 AND @Myselectionparameter
GROUP BY ID

Оцените статью
TechArks.Ru
Добавить комментарий