sql - MS Access - 如何使用 3 个变量进行排名
问题描述
我正在尝试使用以下示例数据中的 3 个变量进行排名:
+-------------+---------+------+------ --+ | 案例编号 | 文件类型 | 文件编号 | 排名 | +-------------+---------+------+------ --+ | 1 | 一个 | 3787104 | 1 | | 1 | 乙| 3786773 | 2 | | 2 | 一个 | 3787505 | 1 | | 3 | 一个 | 3787525 | 1 | | 3 | 乙| 3786892 | 3 | | 3 | 一个 | 3786891 | 2 | | 4 | 乙| 3787514 | 3 | | 4 | 乙| 3787513 | 2 | | 4 | 一个 | 3787512 | 1 | | 5 | 一个 | 3786436 | 6 | | 5 | 一个 | 3786499 | 5 | | 5 | 一个 | 3786456 | 4 | | 5 | 一个 | 3786371 | 3 | | 5 | 一个 | 3786481 | 2 | | 6 | 一个 | 3786815 | 1 | | 7 | 乙| 3786998 | 3 | | 7 | 乙| 3786989 | 2 | | 7 | 一个 | 3786988 | 1 | | 8 | 乙| 3787033 | 4 | | 8 | 一个 | 3787078 | 2 | | 8 | 乙| 3787037 | 3 | | 8 | 一个 | 3787074 | 1 | +-------------+---------+------+------ --+
首先按组排序,然后按文档类型,然后按文档编号。这是我在浏览了这里的一些条目后目前所拥有的:
SELECT [Case Number], [Doc Type], [Document Number], (
SELECT COUNT(*) from [Document Tracker] AS tbl2 WHERE
(
tbl1.[Doc Type] < tbl2.[Doc Type] AND
tbl1.[Case Number] = tbl2.[Case Number]
)
)
+1 AS Rank
FROM [Document Tracker] AS tbl1
ORDER BY [Case Number], [Doc Type] DESC , [Document Number];
这给了我这个输出:
+-------------+---------+------+------ --+ | 案例编号 | 文件类型 | 文件编号 | 排名 | +-------------+---------+------+------ --+ | 1 | 一个 | 3787104 | 1 | | 1 | 乙| 3786773 | 2 | | 2 | 一个 | 3787505 | 1 | | 3 | 一个 | 3787525 | 1 | | 3 | 乙| 3786892 | 3 | | 3 | 一个 | 3786891 | 1 | | 4 | 乙| 3787514 | 3 | | 4 | 乙| 3787513 | 3 | | 4 | 一个 | 3787512 | 1 | | 5 | 一个 | 3786436 | 1 | | 5 | 一个 | 3786499 | 1 | | 5 | 一个 | 3786456 | 1 | | 5 | 一个 | 3786371 | 1 | | 5 | 一个 | 3786481 | 1 | | 6 | 一个 | 3786815 | 1 | | 7 | 乙| 3786998 | 2 | | 7 | 乙| 3786989 | 2 | | 7 | 一个 | 3786988 | 1 | | 8 | 乙| 3787033 | 3 | | 8 | 一个 | 3787078 | 1 | | 8 | 乙| 3787037 | 3 | | 8 | 一个 | 3787074 | 1 | +-------------+---------+------+------ --+
我无法弄清楚缺少的代码也可以对其文档编号进行排名。我很感激这方面的任何帮助。
解决方案
在过滤和排序中需要做一个小的调整:
SELECT
[Case Number],
[Doc Type],
[Document 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],
[Doc Type] DESC,
[Document Number] DESC;
推荐阅读
- eclipse - 将 eclipse 插件添加到市场
- php - cURL post 请求方法
- javascript - 如何在wix中基于选项卡的屏幕之前显示单个屏幕反应本机导航
- ffmpeg - FFmpeg 中不同的 h264 编码器
- java - 无法在 Google Play 上上传应用,证书无效
- java - 解决 8puzzle 的 A* 实现 - java
- database - 使用动态列名填充访问表
- javascript - 折叠在模态中不起作用
- node.js - 在打包的 Electron 应用程序中运行 execFileSync 时出错
- vba - 如何在 Word 样式定义中包含 BackgroundPatternColor 或 HighlightColor?