MS Access 2003 - 排序列表框的字符串值不是按字母顺序

Posted

技术标签:

【中文标题】MS Access 2003 - 排序列表框的字符串值不是按字母顺序【英文标题】:MS Access 2003 - ordering the string values for a listbox not alphabetical 【发布时间】:2010-03-30 20:00:09 【问题描述】:

这是一个愚蠢的问题。假设我有一个为列表框生成的查询,它为三个商店生成值

Store A     18
Store B     32
Store C     54

现在,如果我在 sql 语句中 ORDER BY,它唯一会做的就是按字母顺序降序或升序,但我想要一个特定的顺序(只是因为他们想要一个特定的顺序).....所以我有办法吗在 SQL 中添加一些东西来获取

Store B
Store C
Store A

即基本上逐行我想要什么。谢谢!

【问题讨论】:

【参考方案1】:

在包含商店名称的表中添加一个数字字段sequencer。使用 sequencer 值来确定您的排序顺序。

SELECT sequencer, store_name FROM YourTable ORDER BY sequencer;

在列表框中,为sequencer列设置列宽=0。

或者简单地说,就像@dscarr suggested,不要在SELECT字段列表中包含sequencer,而只是在ORDER BY中包含它...

SELECT store_name FROM YourTable ORDER BY sequencer;

【讨论】:

这个我有一种预感.....不确定你是否可以在 sql 中添加一些东西来完成交叉表中的月份概念。谢谢汉斯! 您可以按照 asstander 的建议将 Switch 函数添加到您的 SQL 中。但是,如果您的查询返回多于几行,则该方法可能具有挑战性。我宁愿根据需要更改 sequencer 字段中的值,而不是修改 Switch 函数。如果您将序列器设为浮点数据类型,您可以分配小数值以将新行放入现有序列中。 ...老实说老兄,完美地解决了我的需要.....再次(可能是本网站上的第一百次)非常感谢汉斯! 这绝对是我处理它的方式。如果将数据添加到表中或从表中删除,则添加 switch 语句可能会返回不准确的结果。此外,您不需要将 sequencer 列的宽度设置为 0,只是不要将其包含在 SELECT 子句中,如下所示: SELECT store_name FROM YourTable ORDER BY sequencer;即使没有选择它,您仍然可以在 ORDER BY 子句中使用排序器列。 @dscarr 既然你这么说了,这似乎很明显。 :-) 我修改了答案。谢谢。【参考方案2】:

你可以做两件事中的一件。

要么使用SWITCH 声明,比如

SELECT Table1.Store, 
       Table1.Val, 
       Switch([Store]="StoreB",1,[Store]="StoreC",2,[Store]="StoreA",3) AS Expr1
FROM Table1
ORDER BY Switch([Store]="StoreB",1,[Store]="StoreC",2,[Store]="StoreA",3);

或者使用二级订单表,存储商店名称的值和按值排序。

【讨论】:

我完全不熟悉那种 switch 语句方法。非常感谢!今天学到了很酷的东西!

以上是关于MS Access 2003 - 排序列表框的字符串值不是按字母顺序的主要内容,如果未能解决你的问题,请参考以下文章

ms access 2003中如何改变输入框的大小

MS Access 2003 - 自动在表单的列表框中显示最后一条记录,而不是第一条

当字符串包含分号时,MS Access VBA AddItem

在 MS Access 2003 上出现错误 (3163)

MS Access - 带有组合框和文本框的 If 语句

如何突出显示 MS-Access 列表框行?