Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL选择每个ID、每个时间、每个组的前N名_Sql Server 2008 - Fatal编程技术网

Sql server 2008 SQL选择每个ID、每个时间、每个组的前N名

Sql server 2008 SQL选择每个ID、每个时间、每个组的前N名,sql-server-2008,Sql Server 2008,我真的很难编写存储过程。 情况就是这样 我将几个表连接到一个存储过程中,并将其存储在一个临时表中。 下面是存储过程给出的结果的图示: CLIENT Request Month Total Client A A 1 1 Client A B 1 3 Client A C 1 9 Client A D 1

我真的很难编写存储过程。 情况就是这样

我将几个表连接到一个存储过程中,并将其存储在一个临时表中。 下面是存储过程给出的结果的图示:

CLIENT        Request     Month   Total

Client A      A           1       1
Client A      B           1       3
Client A      C           1       9
Client A      D           1       4 
Client A      E           1       6

Client A      A           2       6
Client A      B           2       9
Client A      C           2       1
Client A      D           2       3 
Client A      E           2       2

Client B      A           1       3
Client B      B           1       7
Client B      C           1       9
Client B      D           1       8 
Client B      E           1       4

Client B      A           2       5
Client B      B           2       8
Client B      C           2       1
Client B      D           2       1 
Client B      E           2       3
我的问题是,如何根据最高的总请求获得每个客户每月的前3名

我将在Reporting Service中使用一个图表的存储过程,我也很难在图表中使用filter函数,因此我认为有可能从sql查询中首先对其进行过滤

我希望我和上面的插图能清楚地解释这个问题。我真的很感谢你的每一个回复。
非常感谢以前使用GROUPBY子句找出每个客户机的计数,然后使用不得不过滤出创建的GROUP by的数据。

使用按客户机划分的分区和按总描述排序

我尝试了上面所说的,但它只返回了行号,如何使用行号使结果显示前3位。thx对于responsethx对于solution dude,我已经知道如何使用行号来获得我想要的结果。thx对于response dude。这真的很有帮助。行数是关键,Ovidiu Pacurar也提出了这一点。
DECLARE @TABLE Table
(
    CLIENT varchar(100),Request varchar(10),[Month] int,Total int
)

Insert into @Table

Select 'Client A','A',1,1 UNION ALL
Select 'Client A','B',1,3 UNION ALL
Select 'Client A','C',1,9 UNION ALL
Select 'Client A','D',1,4 UNION ALL
Select 'Client A','E',1,6 UNION ALL
Select 'Client A','A',2,6 UNION ALL
Select 'Client A','B',2,9 UNION ALL
Select 'Client A','C',2,1 UNION ALL
Select 'Client A','D',2,3 UNION ALL
Select 'Client A','E',2,2 UNION ALL
Select 'Client B','A',1,3 UNION ALL
Select 'Client B','B',1,7 UNION ALL
Select 'Client B','C',1,9 UNION ALL
Select 'Client B','D',1,8 UNION ALL
Select 'Client B','E',1,4 UNION ALL
Select 'Client B','A',2,5 UNION ALL
Select 'Client B','B',2,8 UNION ALL
Select 'Client B','C',2,1 UNION ALL
Select 'Client B','D',2,1 UNION ALL
Select 'Client B','E',2,3

Declare @Top int
Set @Top=2

;with CTE AS
(
    SELECT CLIENT,Request,[Month],Total,
    --month wise top record based on total request 
    ROW_NUMBER()Over(Partition by CLIENT,[Month] Order by  Total Desc) AS RN
    FROM @Table
)
Select *
From CTE
where rn<=@Top
Order by CLIENT