T-SQL, как рассчитать Palmares и создать представление на основе одной таблицы и представления? - PullRequest
0 голосов
/ 26 декабря 2011

Hy,

У меня есть следующие объекты в карточной игре в бридж:

Tabble: Серия SerieID заглавие DateAdded

Вид: BoardCounter BoardID SerieID Счетчик

Счетчик - это количество раз, когда каждая доска была сыграна. Теперь мне нужно установить рейтинг на основе счетчика, деленного на количество дней присутствия.

Я легко понял, как рассчитать дни:

select serieid, date, datediff(day, DateAdded, GETDATE()) Days, Title from auboardseries

Но я не слишком увлекаюсь T-SQL (в основном используется для LINQ), мне нужна помощь для создания нового представления.

Спасибо

1 Ответ

1 голос
/ 26 декабря 2011

Вот мой ответ на этот вопрос, основанный на целом ряде предположений, которые я сделал по вашему вопросу.

Вот мой код начальной загрузки, чтобы получить пример данных:

Ваш стол серии

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.

...