【问题标题】:SQL AlphaNumerical sort in Access with special charactersAccess中带有特殊字符的SQL Alpha数字排序
【发布时间】:2019-01-21 06:09:03
【问题描述】:

我想在 Access 中创建一个排序,因此以下示例数据集按以下方式排序。

数据集(正确顺序):

+---------+
|   ID    |
+---------+
| 1/1     |
| 2       |
| 2/GEN   |
| 2/1     |
| 2/2     |
| 3       |
| 5/1BR   |
| 99/1    |
| 100/2   |
| 501/2   |
| 999/3/2 |
+---------+

Access 是这样对数据进行排序的:

+---------+
|   ID    |
+---------+
| 1/1     |
| 100/2   |
| 2       |
| 2/1     |
| 2/2     |
| 2/GEN   |
| 3       |
| 5/1BR   |
| 501/2   |
| 99/1    |
| 999/3/2 |
+---------+

基本上每个斜线都是父文件的子文件(在 999/3/2 的例子中也可能是子文件的子文件)。排序应该对父文件按数字排序(例如 2 是 2/1 的父文件),然后对于子文件,应该按字母顺序(GEN 优先级高于 2/1),然后是数字。

任何帮助将不胜感激!

【问题讨论】:

  • MS Access 的字符串操作很差,不支持 JSON 或 XML,也不支持 CTE。我认为您需要编写自己的函数来执行此操作。

标签: sql sorting ms-access


【解决方案1】:

你可以试试老把戏:

Select * From YourTable
Order By Val([ID]), [ID]

【讨论】:

  • 这当然可以,除了那些嵌套更深的文件(示例中的最后一行)
  • 您可以使用带有@Gustav Val 答案的split () 来处理嵌套?根据级别的数量,您可能需要一个函数。
  • @Minty 对于拆分,如果没有 VBA 解决方案,您会遇到麻烦。我写了一个答案here 来说明这个事实。你可以深入 3 级,然后你真的需要 VBA 或得到可怕的 SQL 字符串。
  • @Erik - 好点,我并不反对。只是认为如果嵌套有限,这可能是一个简单的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多