如何解决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 举报,一经查实,本站将立刻删除。