2011-12-26 8 views
0

Hyは、T-SQLどのようにpalmaresを計算し、1つのテーブルとビューに基づいてビューを作成しますか?

私は橋のカードゲームでこれらのオブジェクトを持っている:

Tabble: シリーズ SerieID タイトル DateAdded

ビュー: BoardCounter は SerieID カウンターを基板ID

カウンタは、各ボードが再生された回数です。 今度は、カウンターに基づくランクを、存在の日数で割って設定する必要があります。

私は日を計算する簡単方法を考え出し:

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

しかし、(主にLINQを使用)そのくらいのT-SQLのオタクされていない、私は新しいビューを作成するのに役立つ必要があります。

おかげ

答えて

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ビュー(それはここではテーブルだが、それは問題ではないはずですし、あなたが把握しているんだと述べました既にアウトしています)

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に変換し、結果を小数点以下2桁に丸めたことがわかります。それは、あなたがきめ細かいランク付けをしたいという私のところの前提です。あなたは好きなように調整することができます。

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 

だから、あなたはちょうどこの中にいくつかのテーブル/ビュー/列名を変更し、その上にAS CREATE VIEWを平手打ちする良いことがあります。

関連する問題