0

所以我试图找到一种方法来复制我的 MS Access 表上的 denserank() 函数。我发现以下查询很有帮助:

SELECT 
  Table1.ColA
  ,( SELECT Count(*) 
     FROM
       Table1 AS T 
     WHERE
       T.ColA = Table1.ColA AND
       T.PrimaryKeyFieldName <= Table1.PrimaryKeyFieldName) AS ColB;

此查询非常适合作为复制rank()函数的一种方式。但是,我想修改此查询,以便它进行复制denserank()。换句话说,组的排名现在看起来像这样:

0
0
0
3
3
3
6
6
6

相反,我正在寻找的是:

0
0
0
1
1
1
2
2
2

我正在尝试实现的另一个示例可以在示例 #3 中看到:

https://support.microsoft.com/en-us/kb/208946

任何想法将不胜感激!提前致谢!

4

1 回答 1

2

我相信您只是希望 RANK 从零开始递增,并为每组递增 1?如果是这样,试试这个:

select T1.*,
   (select count(*)
    from (select distinct T2.flda
          from table1 as T2
         )  as T2
    where T2.flda <= T1.flda
   ) as dense_rank
From table1 as T1;

这是我前面提到的第二个查询。但是,我不知道这是否会给你你想要的分组。

SELECT T1.*, 
   (select count(*)
    from (select distinct T2.flda, T2.fldb, T2.MyDate
          from table1 as T2
         )  as T2
    where (T2.flda <= T1.flda) AND (T2.MyDate <> T1.MyDate)
) AS dense_rank
FROM table1 AS T1;
于 2016-12-07T23:02:09.167 回答