SQL Server: условное предложение WHERE

Это мой первый вопрос, так что надеюсь, что все хорошо!

То, что я сделал, — это определяемая пользователем (табличная) функция с использованием MSSMS, где в одной точке мне нужно найти записи на основе параметра функции @Year.

У меня возникает проблема, когда записи старше двух лет, тогда должны быть перечислены все записи старше двух лет. Я бился головой об стену с этим, и вот где я до сих пор продвинулся:

WHERE   (
        @Year = YEAR(GETDATE()) AND YEAR(E.ExampleColumnDate) = @Year
        OR
        @Year = YEAR(GETDATE())-1 AND YEAR(E.ExampleColumnDate) = @Year
        OR
        @Year = YEAR(GETDATE())-2 AND YEAR(E.ExampleColumnDate) = @Year
        OR
        @Year <= YEAR(GETDATE())-3 AND YEAR(E.ExampleColumnDate) < @Year
        )

person poptard    schedule 19.02.2014    source источник
comment
Итак, в чем в чем проблема? Вы получаете неправильные результаты? Сообщение об ошибке? Ощущение, что он должен выглядеть чище?   -  person Damien_The_Unbeliever    schedule 19.02.2014
comment
Ах, да. Этот код ничего не вернет, если год старше двух лет.   -  person poptard    schedule 19.02.2014
comment
Ну, у вас есть несоответствие <= и < в ваших последних тестах - так какое входное значение @Year вы даете, и есть ли у вас данные за годы до? Возможно, если бы вы могли добавить некоторые примеры данных, ваши @Year входные значения и ожидаемые результаты, мы могли бы помочь.   -  person Damien_The_Unbeliever    schedule 19.02.2014
comment
О, я на самом деле понял, что это был не мой код, с которым я боролся, но фактические данные были неверными. Но спасибо за быстрые ответы Дэмиен. Закрывая этот вопрос, когда я могу ..   -  person poptard    schedule 19.02.2014


Ответы (2)


вы также можете получить записи старше двух лет с этим

;with cte 
as
(
SELECT top 10 DATEDIFF(year,E.ExampleColumnDate, getdate()) as diff, * 
  FROM [yourtablename]
  )
  select * from cte where diff =2
person Heena Chhatrala    schedule 19.02.2014

person    schedule
comment
Что это за ответ? Вы только что повторили предложение where. Никаких улучшений и комментариев - person t-clausen.dk; 19.02.2014
comment
Нет, это другой пункт. Посмотрите на скобки. - person John Saunders; 19.02.2014
comment
@JohnSaunders, ты прав, я этого не видел. Есть еще проблема - эти круглые скобки абсолютно не меняют логику или результат. - person t-clausen.dk; 19.02.2014
comment
Я просто принял ответ, чтобы закрыть этот вопрос, потому что результаты были хорошими. - person poptard; 19.02.2014