我有一个带有float
值的表。我想使用这些值的子集 (A) 来使用PERCENT_RANK()
. 然后,我想根据从第一个子集 (A) 派生的排名,将排名分配给表中值的第二个(非相交)子集 (B)。简单地将 (B) 中的值连接到 (A) 中的值是行不通的,因为子集 (B) 中的值通常不等于子集 (A) 中的值。在这种情况下,我可以使用“最接近值”方法或“线性插值”方法来获得排名。我更喜欢速度和简单,因为我要处理数十万行。
这是一个具体的例子(假设子集 A 是 Flag = 0 并且子集 B 是 Flag = 1):
DECLARE @Data TABLE
(
Value FLOAT,
Flag BIT
)
INSERT INTO @Data SELECT 0.081, 0
INSERT INTO @Data SELECT 0.831, 0
INSERT INTO @Data SELECT 0.798, 0
INSERT INTO @Data SELECT 0.722, 0
INSERT INTO @Data SELECT 0.322, 0
INSERT INTO @Data SELECT 0.186, 0
INSERT INTO @Data SELECT 0.494, 0
INSERT INTO @Data SELECT 0.757, 0
INSERT INTO @Data SELECT 0.996, 0
INSERT INTO @Data SELECT 0.146, 0
INSERT INTO @Data SELECT 0.514, 1
INSERT INTO @Data SELECT 0.787, 1
INSERT INTO @Data SELECT 0.125, 1
INSERT INTO @Data SELECT 0.324, 1
INSERT INTO @Data SELECT 0.86, 1
--Subset A
SELECT *,
Rnk = PERCENT_RANK() OVER (ORDER BY Value)
FROM @Data
WHERE Flag = 0
--Subset B
SELECT *,
Rnk = ?--Ranking based on ranks derived from subset A
FROM @Data
WHERE Flag = 1