我正在使用寻呼系统。对于我的一些同事,我需要创建一些目录。目录中的每个人都有一个 PAGER_ID 和一个 MESSAGING_ID。PAGER_ID 对于给定的寻呼设备是唯一的,而 MESSAGING_ID 对于一个人是唯一的。一个小组可能轮班工作,并在轮班之间传递一个设备,导致几个人拥有相同的 PAGER_ID 和不同的 MESSAGING_ID。这很好,而且是设计使然。
对于我们的目录,用户希望满足以下条件:
- 每个 PAGER_ID 只显示一次(我知道我可以通过 SELECT TOP 1 到 PAGER_ID 来做到这一点)
- 当 PAGER_ID 的 MESSAGING_ID 为十位数字和一个或多个具有不同位数的其他 MESSAGING_ID 时,首选十位数字的 MESSAGING_ID。
- 如果没有 10 位数的 MESSAGING_ID,则可以使用具有任何其他位数的 MESSAGING_ID。
简而言之:他们只想查看 PAGER_ID / MESSAGING_ID 的一条记录。他们不在乎是否每个人都列在目录中。他们并不真正关心哪个 MESSAGING_ID,只要每个 PAGER_ID 在目录中显示只有一个 MESSAGING_ID 并且只要 10 位 MESSAGING_ID 优先于那些不是 10 位长的 MESSAGING_ID。
我尝试了 TOP 和 IIF 查询的组合,但无法让它们以所需的方式一起玩得很好。
我的基本选择查询是:
SELECT
tbl_Amcom_Prod.NAME,
tbl_Amcom_Prod.PAGER_ID,
tbl_Amcom_Prod.MESSAGING_ID
FROM tbl_Amcom_Prod
WHERE
(((tbl_Amcom_Prod.PAGER_ID) Like "241662"
Or (tbl_Amcom_Prod.PAGER_ID) Like "18888"))
ORDER BY tbl_Amcom_Prod.PAGER_ID;
结果是:
| NAME | PAGER_ID | MESSAGING_ID |
--------------------------------------------
| TESTER 1 | 18888 | 18888 |
--------------------------------------------
| SMITH, MARK | 18888 | 5735551262 |
--------------------------------------------
| SUPERVISOR | 241662 | 102621 |
--------------------------------------------
| JOHN, JONES | 241662 | 101436 |
--------------------------------------------
| SEEGER, ROBERT | 241662 | 101409 |
--------------------------------------------
他们想看到这个:
| NAME | PAGER_ID | MESSAGING_ID |
--------------------------------------------
| SMITH, MARK | 18888 | 5735551262 |
--------------------------------------------
| SUPERVISOR | 241662 | 102621 |
--------------------------------------------
有任何想法吗?