Sql 是否可以按组合框值列表排序?

Sql 是否可以按组合框值列表排序?,sql,database,ms-access,ms-access-2010,Sql,Database,Ms Access,Ms Access 2010,我正在使用Access,并且正在编写一个SQL查询,其中我希望按组合框值列表序列排序。例如,如果行源类型的Combox列表:值列表和行源:星期一、星期二、星期三等 将按照组合框中的顺序而不是字母顺序进行排序 您可以使用IIF设置顺序 ORDER BY IIf([FIELD]="Monday", 0, IIf([Status]="Tuesday", 1, 2)) 因此,您可以在vba中构建SQL,从组合框中获取值,并通过claus将其构建到您的订单中 说你的组合叫CBoday 您可以循环组合并获

我正在使用Access,并且正在编写一个SQL查询,其中我希望按组合框值列表序列排序。例如,如果行源类型的Combox列表:值列表和行源:星期一、星期二、星期三等


将按照组合框中的顺序而不是字母顺序进行排序

您可以使用IIF设置顺序

ORDER BY IIf([FIELD]="Monday", 0, IIf([Status]="Tuesday", 1, 2))
因此,您可以在vba中构建SQL,从组合框中获取值,并通过claus将其构建到您的订单中

说你的组合叫CBoday

您可以循环组合并获取值

Dim strOrderBy As String
Dim intCounter As Integer
For intCounter = 0 To cboDays.ListCount - 1
  Debug.Print cboDays.ItemData(intCounter)
  strOrderBy = strOrderBy & "IIf([FIELD]="& Chr(34) & cboDays.ItemData(intCounter) & Chr(34) & ", " & i & ", "
Next

'Remove the last comma
Dim intOBLen As Integer
intOBLen = Len(strOrderBy)
strOrderBy = Left(strOrderBy, intSSLen - 1)

strOrderBy = "ORDER BY " & strOrderBy & ")"

然后将其添加到SQL的其余部分,并将表单的行源设置为该SQL。

您可以使用IIF设置顺序

ORDER BY IIf([FIELD]="Monday", 0, IIf([Status]="Tuesday", 1, 2))
因此,您可以在vba中构建SQL,从组合框中获取值,并通过claus将其构建到您的订单中

说你的组合叫CBoday

您可以循环组合并获取值

Dim strOrderBy As String
Dim intCounter As Integer
For intCounter = 0 To cboDays.ListCount - 1
  Debug.Print cboDays.ItemData(intCounter)
  strOrderBy = strOrderBy & "IIf([FIELD]="& Chr(34) & cboDays.ItemData(intCounter) & Chr(34) & ", " & i & ", "
Next

'Remove the last comma
Dim intOBLen As Integer
intOBLen = Len(strOrderBy)
strOrderBy = Left(strOrderBy, intSSLen - 1)

strOrderBy = "ORDER BY " & strOrderBy & ")"

然后将其添加到SQL的其余部分,并将表单的行源设置为该SQL。

按照您编写的方式,答案是“否”。不是动态的

您应该做的是将组合框项存储在表中。使用值列表从来都不是一个好主意,而这正是不应该使用值列表的明显原因之一

将值存储在表中,并使用秩字段。像这样:

ComboName   ComboValue  ComboRank
cboDays     Monday          1
cboDays     Tuesday         2
cboDays     Wednesday       3
cboDays     Thursday        4
cboDays     Friday          5
cboDays     Saturday        6
cboDays     Sunday          7
现在,对于组合框的行源,请使用以下命令:

SELECT ComboRank, ComboValue 
FROM tblCombos 
WHERE ComboName = "cboDays" 
ORDER BY ComboRank; 
然后,在组合框中设置以下属性:

Column Count: 2
Column Widths: 0, 1
Bound Column: 2
Limit To List: Yes
如果您有任何其他组合框,请将它们添加到tblCombos中,并将组合框名称更改为组合框的名称,并相应地添加值和等级

您的数据表应该存储ComboValue(理想情况下,您实际使用一个ID字段,以便存储尽可能少的信息)。因此,您要做的是在tblCombo上左键联接,以获得排序顺序:

Select MyTable.*, tblCombo.ComboRank 
from MyTable
Left Join tblCombo 
on MyTable.DayValue = tblCombo.ComboValue
Order By tblCombo.ComboRank

这是您将编写的查询,用于显示所有数据,按组合框的顺序排序。显然,您需要将“MyTable.DayValue”更改为表和字段的实际名称。

按照您编写的方式,答案是“否”。不是动态的

您应该做的是将组合框项存储在表中。使用值列表从来都不是一个好主意,而这正是不应该使用值列表的明显原因之一

将值存储在表中,并使用秩字段。像这样:

ComboName   ComboValue  ComboRank
cboDays     Monday          1
cboDays     Tuesday         2
cboDays     Wednesday       3
cboDays     Thursday        4
cboDays     Friday          5
cboDays     Saturday        6
cboDays     Sunday          7
现在,对于组合框的行源,请使用以下命令:

SELECT ComboRank, ComboValue 
FROM tblCombos 
WHERE ComboName = "cboDays" 
ORDER BY ComboRank; 
然后,在组合框中设置以下属性:

Column Count: 2
Column Widths: 0, 1
Bound Column: 2
Limit To List: Yes
如果您有任何其他组合框,请将它们添加到tblCombos中,并将组合框名称更改为组合框的名称,并相应地添加值和等级

您的数据表应该存储ComboValue(理想情况下,您实际使用一个ID字段,以便存储尽可能少的信息)。因此,您要做的是在tblCombo上左键联接,以获得排序顺序:

Select MyTable.*, tblCombo.ComboRank 
from MyTable
Left Join tblCombo 
on MyTable.DayValue = tblCombo.ComboValue
Order By tblCombo.ComboRank
这是您将编写的查询,用于显示所有数据,按组合框的顺序排序。显然,您需要将“MyTable.DayValue”更改为表和字段的实际名称