经常会遇到分组获取Top n内容的数据,或者分组排序
这就需要用到ROW_NUMBER()这个函数
ROW_NUMBER ( )
OVER ( [ PARTITION BY 字段1 , 字段2… [ 字段n ] ] ORDER BY 字段x)
示例如下
CREATE TABLE #test (id INT,texttt NVARCHAR(50))
INSERT INTO #test ( id, texttt)
VALUES
(1,N’一’)
,(1,N’二’)
,(1,N’三’)
,(1,N’四’)
,(1,N’一二’)
,(1,N’三四’)
,(2,N’一’)
,(2,N’二’)
,(2,N’三’)
,(2,N’四’)
,(2,N’一二’)
,(2,N’三四’)
,(3,N’一’)
,(3,N’二’)
,(3,N’三’)
,(3,N’四’)
,(3,N’一二’)
,(3,N’三四’)
,(4,N’一’)
,(4,N’二’)
,(4,N’三’)
,(4,N’四’)
,(4,N’一二’)
,(4,N’三四’)
,(5,N’一’)
,(5,N’二’)
,(5,N’三’)
,(5,N’四’)
,(5,N’一二’)
,(5,N’三四’)
SELECT * FROM #test
SELECT id,texttt
,ROW_NUMBER()
OVER (PARTITION BY id ORDER BY texttt ASC/*降序排列DESC*/) num
FROM #test
以每个id分组,按texttt 排升序进行编号
PARTITION BY可以多个字段分组,ORDER BY同理