如何对某些列中具有相同数据的行赋予相同的排名,然后在数据更改时增加 SQL

How to give same rank to rows with same data in some columns then increase when data changed SQL

我正在尝试在我的 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 不是按顺序出现的,而是根据在 main sql 上应用的顺序出现的。脚本的输出是:

从屏幕截图中可以看出,它对 ID 和 Date1 列中具有相同数据的行赋予相同的排名(P_Key),但由于主要排序依据而在各处乱序。我希望其他行以与 main "Order By" 应用的顺序相同的顺序出现,并且 "P_Key" 的顺序从 1 开始,然后依次递增。我该怎么做?

您不能对 DENSE_RANK 使用 ORDER BY,除非您提供要在 DENSE_RANK 的 ORDER BY 内排序的列。另一种方法是使用 CTEDerived 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