计算列基于排名位置

时间:2018-02-17 17:56:04

标签: sql sql-server

我正在尝试获取一个新列(计算)来根据位置列中的位置分配点,如此图像

image with computed rank column

我在下面尝试了这个查询,但我的任务没有成功:我寻求你的帮助,请帮助

在sql server中查询

sqlquery I tried in sql server

2 个答案:

答案 0 :(得分:2)

您无法使用$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Metadata-Flavor: Google')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); return curl_exec($ch); 进行排名。你总会得到" 1"。使用子查询:

apply

我发现算法比select . . . from (select ae.*, rank() over (order by averagemark desc) as position from agriculturalentries ) cross join (values (case when rank >= 13 then 150 - rank * 10 end) ) as v(pointsearned); 更容易输入,但你可以使用更详细的形式。

您可能会问为什么case总会返回" 1"在您的查询中。这是因为rank()一次只考虑一行(如所写)。该行的排名必然是" 1"。

答案 1 :(得分:2)

With AllMarks AS 
(SELECT
CompetitorID,
ApiEntryId,
AverageMark,
RANK() OVER (ORDER BY AverageMark)AS RankPosition

-- Add other columns
FROM ApicultureEntries
)
SELECT
a.*,(CASE WHEN  a.RankPosition < 14 THEN 150 - RankPosition * 10 ELSE NULL  END) AS PositionEarned
FROM AllMarks AS a