Sql 是否可以按组合框值列表排序?
我正在使用Access,并且正在编写一个SQL查询,其中我希望按组合框值列表序列排序。例如,如果行源类型的Combox列表:值列表和行源:星期一、星期二、星期三等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 您可以循环组合并获
将按照组合框中的顺序而不是字母顺序进行排序 您可以使用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”更改为表和字段的实际名称