微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Access-如何使用3个变量进行排名

如何解决MS Access-如何使用3个变量进行排名

我正尝试使用以下示例数据中的3个变量进行排名:

+-------------+----------+-----------------+--------+
| Case Number | Doc Type | Document Number | Rank   |
+-------------+----------+-----------------+--------+
|           1 | A        |         3787104 |    1   |
|           1 | B        |         3786773 |    2   |
|           2 | A        |         3787505 |    1   |
|           3 | A        |         3787525 |    1   |
|           3 | B        |         3786892 |    3   |
|           3 | A        |         3786891 |    2   |
|           4 | B        |         3787514 |    3   |
|           4 | B        |         3787513 |    2   |
|           4 | A        |         3787512 |    1   |
|           5 | A        |         3786436 |    6   |
|           5 | A        |         3786499 |    5   |
|           5 | A        |         3786456 |    4   |
|           5 | A        |         3786371 |    3   |
|           5 | A        |         3786481 |    2   |
|           6 | A        |         3786815 |    1   |
|           7 | B        |         3786998 |    3   |
|           7 | B        |         3786989 |    2   |
|           7 | A        |         3786988 |    1   |
|           8 | B        |         3787033 |    4   |
|           8 | A        |         3787078 |    2   |
|           8 | B        |         3787037 |    3   |
|           8 | A        |         3787074 |    1   |
+-------------+----------+-----------------+--------+

首先按组排名,然后按文档类型,然后按文档编号。 浏览下面的一些条目后,这是我目前拥有的东西:

import sys
sys.stdout.write(q_type)

这给了我这个输出

+-------------+----------+-----------------+--------+
| Case Number | Doc Type | Document Number | Rank   |
+-------------+----------+-----------------+--------+
|           1 | A        |         3787104 |    1   |
|           1 | B        |         3786773 |    2   |
|           2 | A        |         3787505 |    1   |
|           3 | A        |         3787525 |    1   |
|           3 | B        |         3786892 |    3   |
|           3 | A        |         3786891 |    1   |
|           4 | B        |         3787514 |    3   |
|           4 | B        |         3787513 |    3   |
|           4 | A        |         3787512 |    1   |
|           5 | A        |         3786436 |    1   |
|           5 | A        |         3786499 |    1   |
|           5 | A        |         3786456 |    1   |
|           5 | A        |         3786371 |    1   |
|           5 | A        |         3786481 |    1   |
|           6 | A        |         3786815 |    1   |
|           7 | B        |         3786998 |    2   |
|           7 | B        |         3786989 |    2   |
|           7 | A        |         3786988 |    1   |
|           8 | B        |         3787033 |    3   |
|           8 | A        |         3787078 |    1   |
|           8 | B        |         3787037 |    3   |
|           8 | A        |         3787074 |    1   |
+-------------+----------+-----------------+--------+

我无法弄清楚缺少的代码是否也要对它的文档编号进行排名。 感谢您的帮助。

解决方法

您要按[文档类型]和[文档编号]排列的[案例编号]中的行编号。为此,您需要为每行计数前面的行。这些行必须具有相同的[案例编号],但是[文档类型]较小,或者[文档类型]相同,并且[文档编号]较小。

SELECT [Case Number],[Doc Type],[Document Number],(
    SELECT  COUNT(*)
    FROM [Document Tracker] AS tbl2 
    WHERE tbl1.[Case Number] = tbl2.[Case Number]
    AND 
    (
      tbl1.[Doc Type] < tbl2.[Doc Type]
      OR
      (
        tbl1.[Doc Type] = tbl2.[Doc Type]
        AND
        tbl1.[Document Number] < tbl2.[Document Number]
      )
    )
  ) +1 AS Rank
FROM [Document Tracker] AS tbl1
ORDER BY [Case Number],[Doc Type] DESC,[Document Number];
,

在过滤和排序中需要进行一些细微调整:

SELECT 
    [Case Number],(SELECT 
            COUNT(*) 
        FROM 
            [Document Tracker] AS tbl2 
        WHERE
            tbl1.[Doc Type] & CStr(tbl1.[Document Number]) > tbl2.[Doc Type] & CStr(tbl2.[Document Number]) 
            AND
            tbl1.[Case Number] = tbl2.[Case Number]) + 1 AS Rank
FROM 
    [Document Tracker] AS tbl1
ORDER BY 
    [Case Number],[Document Number] DESC;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。