Вот мой ответ на этот вопрос, основанный на целом ряде предположений, которые я сделал по вашему вопросу.
Вот мой код начальной загрузки, чтобы получить пример данных:
Ваш стол серии
DECLARE @series table
(
SeriesID int,
Title varchar(10),
DateAdded datetime
)
INSERT @series
SELECT 1,'series 1','10-10-2011'
UNION
SELECT 2,'series 2','8-01-2011'
UNION
SELECT 3,'series 3','11-30-2011'
Ваш BoardCounter View (здесь таблица, но это не должно иметь значения, и вы сказали, что уже поняли)
DECLARE @BoardCounter table
(
BoardID INT,
SeriesID INT,
[COUNTER] INT
)
INSERT @BoardCounter
SELECT 1,1,1000
UNION
SELECT 1,2,800
UNION
SELECT 1,3,600
UNION
SELECT 2,1,2000
UNION
SELECT 2,2,1600
UNION
SELECT 2,3,1200
UNION
SELECT 3,1,500
UNION
SELECT 3,2,400
UNION
SELECT 3,3,300
Хорошо, следующее должно быть в духе того, что вы говорите, что хотите. Это просто соединение таблицы и вид сверху. Опять же, это хорошо, потому что, как только представление создано, в этой ситуации оно похоже на таблицу. Ничего особенного. Я разделил счетчик на прошедшие дни, как вы указали. Вы заметите, что я сначала преобразовал оба значения в значения FLOAT и округил результат до двух десятичных разрядов. С моей стороны это только предположение, что вам нужен точный рейтинг. Вы можете настроить это, как вам нравится.
select S.SeriesID, DateAdded as [Date], ROUND(CAST([COUNter] AS FLOAT)/CAST(datediff(day, DateAdded, GETDATE()) AS FLOAT),2) AS Ranking,S.Title
from @series s
INNER JOIN @BoardCounter bc
ON s.seriesid=bc.seriesid
Итак, вам следует поменять несколько имен таблиц / представлений / столбцов в этом и добавить к ним CREATE VIEW AS.