如何在SQL Server 2019上对每个查询系统进行增量排名?

如何在SQL Server 2019上对每个查询系统进行增量排名?,sql,sql-server,Sql,Sql Server,目前在SQL Server 2019上,我有以下代码: 选择 dbo.GroundTruth.QueryId, dbo.GroundTruth.Q0, dbo.GroundTruth.Id, RANK()超过(按dbo.GroundTruth.Similarity DESC排序)作为秩, dbo.GroundTruth.Similarity, dbo.GroundTruth.StValue来自GroundTruth dbo.GroundTruth.QueryID ASC命令 返回的结果如下:

目前在SQL Server 2019上,我有以下代码:

选择
dbo.GroundTruth.QueryId,
dbo.GroundTruth.Q0,
dbo.GroundTruth.Id,
RANK()超过(按dbo.GroundTruth.Similarity DESC排序)作为秩,
dbo.GroundTruth.Similarity,
dbo.GroundTruth.StValue来自GroundTruth
dbo.GroundTruth.QueryID ASC命令
返回的结果如下:

2639                 Q0   68556       118406               78.29591                                STANDARD
2639                 Q0   68582       143678               77.34721                                STANDARD
264                  Q0   6952        91193                79.59099                                STANDARD
264                  Q0   6951        207182               75.00000                                STANDARD
264                  Q0   6950        18046                88.25763                                STANDARD
2640                 Q0   68598       23812                87.26044                                STANDARD
2640                 Q0   68600       23776                87.27147                                STANDARD
2641                 Q0   68662       39200                84.62848                                STANDARD
2641                 Q0   68609       177816               76.06838                                STANDARD
但是,我希望
QueryID
(第1)列的顺序是递增的(1、2、3、4、5,…),而不是当前的形式(1、10、100、1000、10000),并且我希望
rank
(第4)列具有如下列:

QueryID     ...     DocID     ...     rank     ...
1           ...     123       ...     1        ...
1           ...     247       ...     2        ...
1           ...     9876      ...     3        ...
2           ...     23        ...     1        ...
2           ...     17        ...     2        ...
2           ...     69        ...     3        ...
2           ...     09        ...     4        ...

SQL Server 2019中是否有能够执行此操作的属性,或者它是否需要包含多个函数?

查询ID似乎是一个字符串。您可以将其转换为整数。对于排名,您需要按照
QueryId
进行排序,因此使用
分区依据

SELECT gt.*,
       RANK() OVER (PARTITION BY gt.QueryId ORER BY gt.SImilarity DESC) as rank
FROM GroundTruth gt
ORDER BY TRY_CONVERT(int, gt.QueryID) ASC;
(这使用
gt.*
来关注您在问题中关心的列。不过,一般来说,使用表别名可以使查询更易于编写和读取。)

如果希望用枚举值实际替换
QueryId
,请使用:

SELECT DENSE_RANK() OVER (ORDER BY gt.QueryId)
我不确定您是否希望基于字符串或字符串的数值进行排序。对于数字排序,您可以使用:

SELECT DENSE_RANK() OVER (ORDER BY CONVERT(int, gt.QueryId))

(所有这些都假设
int
对于值来说足够大。如果不使用
NUMERIC
/
DECIMAL

供参考,应避免使用。坚持给你的对象加上别名,并用它们来限定你的列。并且用一致的风格书写。在FROM子句中,您没有对表进行模式限定,但对列进行模式限定。如果某个内容是数字,请将其存储为数字。不要在
varchar
列中存储数字