2016-06-09 43 views
1

我有一個玩家遊戲歷史表,列出了玩家在比賽中玩過的所有象棋遊戲。爲每個玩家選擇最常見的對手

CREATE TABLE [dbo].[cub_player_hist](
    [id] [int] NOT NULL, 
    [player_id] [int] NULL, --Player's ID 
    [Event_Title] [nvarchar](100) NULL, 
    [Event_id] [int] NULL, 
    [Event_Start] [smalldatetime] NULL, 
    [FullName] [nvarchar](max) NULL, -- Player's Name 
    [Result_txt] [varchar](9) NULL, 
    [result] [int] NULL, 
    [played_id] [int] NULL, -- Opponent's ID 
    [Played] [nvarchar](max) NULL, -- Opponent's Name 
CONSTRAINT [cub_player_hist_pk] PRIMARY KEY CLUSTERED 
) 

我想創建一個視圖,將計數的次數每個player_id的played_id並選擇最頻繁出現的每個played_id。

如果一個視圖是錯誤的方式去了解這一點,那麼我願意提供建議!

+0

你有沒有考慮正常化cub_player_hist? 也許你不允許 - 但是如果你可以那麼下面的表格(假設多對可以在一個事件中玩) - 玩家 - 事件 - 匹配 – BIDeveloper

回答

1

請測試以下是我過去multiple-CTE in SQL

計數遊戲玩家對他/她的所有比賽,併爲每個對手計數SQL腳本,您可以使用SQL COUNT() function with Partition By clause

在最後一步,我們可以使用SQL Row_Number() function with Partition By子句

;with cte as 
(
    select *, 
     COUNT(*) over (partition by player_id) cnt_all, 
     COUNT(*) over (partition by player_id, played_id) cnt_opp 
    from [dbo].[cub_player_hist] 
), cte2 as (
    select 
     *, ROW_NUMBER() over (partition by player_id order by cnt_opp desc) rn 
    from cte 
) 
select 
    player_id, 
    fullname player_name, 
    played_id, 
    played opponent_name 
from cte2 
where rn = 1 
order by player_id