0

我试图在我的 SQL 查询中使用 Dense_Rank 对某些列中具有相同数据的行进行排名,然后在下一行中发现更改的数据时增加它。我通过这个查询成功地这样做了:

SELECT DENSE_RANK () OVER (ORDER BY ID, Date1) AS P_Key, 
   *
FROM dbo.tbl_Main T
ORDER BY S_ID, ID, Date1, Date2;

但是 Rank 不是按顺序出现的,而是根据主 sql 上应用的顺序出现的。脚本的输出是:

在此处输入图像描述

从屏幕截图中可以看出,它为在 ID 和 Date1 列中具有相同数据的行提供相同的排名(P_Key),但由于主要的 Order By 而到处乱序。我希望其他行以与主“Order By”应用的顺序相同的顺序出现,并且“P_Key”的顺序从 1 开始,然后按顺序增加。我该怎么做?

4

1 回答 1

0

您不能对 DENSE_RANK 使用 ORDER BY,除非您提供要在 DENSE_RANK 的 ORDER BY 内排序的列。可以完成的另一种方法是使用CTEor Derived tables。可以通过以下方式完成

;WITH CTE AS
(
    SELECT DENSE_RANK () OVER (ORDER BY ID, Date1) AS P_Key,*
    FROM MyTable T  
)
SELECT * FROM CTE
ORDER BY P_Key,S_ID, ID, Date1, Date2
于 2015-05-04T16:14:00.180 回答