【发布时间】:2017-03-15 13:49:08
【问题描述】:
我正在尝试将排名应用于我的数据集,逻辑如下:
对于每个 ID,Order by ID2 ASC 和 Order by IsMaster Desc 对第 1 行进行排名,并且仅在 ID4 值更改时更改它
我的数据集和所需的输出如下所示:
测试数据
CREATE TABLE Test_Table
(ID INT ,ID2 INT, IsMaster INT, ID4 VARCHAR(10))
GO
INSERT INTO Test_Table (ID ,ID2 , IsMaster , ID4 )
VALUES
(1, 101, 1 ,'AAA') -- 1 <-- Desired output for rank
,(1, 102, 0 ,'AAA') -- 1
,(1, 103, 0 ,'AAB') -- 2
,(1, 104, 0 ,'AAB') -- 2
,(1, 105, 0 ,'CCC') -- 3
,(2, 101, 1 ,'AAA') -- 1
,(2, 102, 0 ,'AAA') -- 1
,(2, 103, 0 ,'AAA') -- 1
,(2, 104, 0 ,'AAB') -- 2
,(2, 105, 0 ,'CCC') -- 3
这是我迄今为止尝试过的:
SELECT *
,DENSE_RANK() OVER (PARTITION BY ID ORDER BY ID2 ASC, IsMaster DESC ) rn
FROM Test_Table
请帮帮我,谢谢。
【问题讨论】:
标签: sql-server sql-server-2014 ranking-functions