T-SQL如何计算palmares并根据一个表和一个视图创建一个视图?

时间:2011-12-26 00:17:57

标签: tsql view ranking

HY,

我在桥牌游戏中有这些对象:

于此项目表格: 的系列 SerieID 标题 DateAdded

查看: 的 BoardCounter 板卡ID SerieID 计数器

计数器是每个棋盘播放的时间。 现在我需要根据柜台建立排名除以在场天数。

我很容易理解如何计算天数:

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

但不是那么多T-SQL极客(主要用于LINQ),我需要帮助才能创建新视图。

谢谢

1 个答案:

答案 0 :(得分:1)

基于我对你的问题做出的一系列假设,我在这里捅了一下。

这是我获取样本数据的引导代码:

你的系列表

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。