如何对某些列中具有相同数据的行赋予相同的排名,然后在数据更改时增加 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 内排序的列。另一种方法是使用 CTE
或 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
我正在尝试在我的 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 内排序的列。另一种方法是使用 CTE
或 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