Создать столбец представления SQL из набора результатов

Я новичок в SQL и пытаюсь пересмотреть сценарий создания представления, чтобы добавить новый столбец из набора результатов оператора select. Я немного погуглил, но не видел хорошего примера.

Вот оператор выбора:

select lease_id, year(posting_date) as years1, SUM(amount) as Annual 
from la_tbl_lease_projection
group by year(posting_date), lease_id
order by lease_id

Осложняющий фактор заключается в следующем. Столбец «Годовой» в результирующем наборе — это годовая сумма расходов по арендному_идентификатору. Однако в представлении, в которое я добавляю столбец, расходы отображаются ежемесячно. Таким образом, rent_id 100001 имеет 12 строк в 2010, 2011 и т. д. Я хочу, чтобы в представлении в новом столбце отображалась годовая сумма по каждой из 12 месячных позиций. Новый столбец «Годовой» должен располагаться справа от столбца «Сумма», и каждая строка должна содержать сумму столбца «Сумма» за этот год. например.:

Lease_id      Posting_Date         Amount        Annual

100001        2010-01-01             $25           $300

100001        2010-02-01             $25           $300

etc...............

Представление, которое я добавляю, представляет собой достаточно сложное объединение и объединение нескольких таблиц. Вместо создания новой таблицы для моего набора результатов я хотел бы получить к ней доступ с помощью хранимой процедуры, если только нет лучшего варианта. MSDN говорит, что временные таблицы и табличные переменные не работают в представлениях, так что это не вариант.

Я думаю, что это можно сделать примерно так: «когда years1 = years1 И арендный_id = арендный_id, тогда [Годовой] = итог набора результатов, но, похоже, я не могу это визуализировать. Заранее спасибо за ваш вклад.


person user2414509    schedule 23.05.2013    source источник


Ответы (2)


Поскольку вы просматривали MSDN, я предполагаю, что для этого ответа используется SQL Server;

Чтобы получить годовой столбец, который представляет собой сумму сумм по годам, вы можете использовать SUM() OVER ();

SELECT *, SUM(Amount) OVER (PARTITION BY YEAR(Posting_Date)) Yearly
FROM la_tbl_lease_projection;

SQLfiddle для тестирования.

person Joachim Isaksson    schedule 23.05.2013
comment
Это сработало для меня! Спасибо! Я добавил арендную плату в раздел, чтобы он суммировал суммы по годам и аренде, и это работает как шарм. Мне все еще нужно выполнить соединение в представлении, но я должен быть в состоянии понять это. - person user2414509; 24.05.2013

Я думаю, что производная таблица поможет вам что-то вроде:

select blah, blah2, blah3, ..., a.annual
from
<Long complicated set of joins>
join
  (select lease_id, year(posting_date) as years1, SUM(amount) as Annual 
  from la_tbl_lease_projection
  group by year(posting_date), lease_id
  order by lease_id) a 
    on sometable.lease_id = a.lease_id and year(sometable .posting_date) = a.years1
Where <complex where conditions>
person HLGEM    schedule 23.05.2013