Любое событие в таблице с указанием дня / месяца взносов перед текущим днем / месяцем произойдет * в этом * году.Любое событие с должным днем / месяцем за текущим днем / месяцем произойдет следующий год.Любое событие, которое должно произойти в следующем году, является более продолжительным, чем любое событие, которое должно произойти в этом году.
Теперь, когда говорится, то, что вы просите, невозможно, потому что вы просите ...a View, sorted by...
, то есть концепции, которой не существует. Просмотры не отсортированы .Только запросы отсортированы.Таким образом, вы можете создать представление, которое проецирует правильную дату события, а затем запрос из представления должен использовать ORDER BY , чтобы отсортировать события по дате события:
create table Events (
id int identity(1,1) not null,
DueDay int not null,
DueMonth int not null);
go
insert into Events (DueDay, DueMonth)
values (1,1), (15,11), (31,12);
go
create view eventsDate as
select id, dateadd(day, DueDay-1,
dateadd (month, DueMonth-1,
dateadd(year,
case when DueMonth < month(getdate()) or
(DueMonth = month(getdate()) and
DueDay < day(getdate()))
then year(getdate())-1899
else year(getdate())-1900 end,
'19000101'))) as DueDate
from Events;
Чтобы получитьсобытия по порядку, запрос должен включать порядок по:
select * from eventsDate order by DueDate desc;