在 MS Access 的列中包含特定值的过滤器 ID
Filter Id that contain specific values in columns in MS Access
我正在尝试使用查询从 MS Access 中的 table 过滤行,但没有成功。我在下面 table 下面,我想根据 KH1 到 KH6 列中的任何列中的值“A1”和“A2”生成查询。结果应如下所示。我在查询中使用或条件,但它在 MS Access 中生成空白 table。非常感谢任何帮助。
Table:
ID KH1 KH2 KH3 KH4 KH5 KH6
001 A2 B1 C1 D1 E1 F1
002 F1 A1 B1 D1 E1 G1
003 A1 B1 D1 E1
004 XX XX XX XX XX XX
005 AA AB AC A2 XX
006 XX XX XX A1
007 XX XX XX XX A1 XX
008 XX XX AE XX XX AC
结果:
ID KH1 KH2 KH3 KH4 KH5 KH6
001 A2 B1 C1 D1 E1 F1
002 F1 A1 B1 D1 E1 G1
003 A1 B1 D1 E1
005 AA AB AC A2 XX
006 XX XX XX A1
007 XX XX XX XX A1 XX
您需要一个 WHERE 子句来检查 6 列中的每一列:
SELECT *
FROM tablename
WHERE KH1 IN ('A1', 'A2')
OR KH2 IN ('A1', 'A2')
OR KH3 IN ('A1', 'A2')
OR KH4 IN ('A1', 'A2')
OR KH5 IN ('A1', 'A2')
OR KH6 IN ('A1', 'A2');
如果要检查的列很多,这将无法很好地扩展。
如果您重新设计 table 以便每行仅包含 KH?
列中的 1 列,那就更容易了。
像这样:
ID nr KH
001 1 A2
001 2 B1
001 3 C1
001 4 D1
001 5 E1
001 6 F1
您可以为此使用 DAO:
Public Function SelectRecords()
Dim Records As DAO.Recordset
Dim Field As DAO.Field
Set Records = CurrentDb.OpenRecordset("Select * From YourTable")
While Not Records.EOF
For Each Field In Records.Fields
Select Case Field.Value
Case "A1", "A2"
Exit For
End Select
Next
If Not Field Is Nothing Then
' Output record.
Debug.Print Records.Fields(0).Value, Field.Name, Field.Value
Set Field = Nothing
End If
Records.MoveNext
Wend
Records.Close
End Function
我正在尝试使用查询从 MS Access 中的 table 过滤行,但没有成功。我在下面 table 下面,我想根据 KH1 到 KH6 列中的任何列中的值“A1”和“A2”生成查询。结果应如下所示。我在查询中使用或条件,但它在 MS Access 中生成空白 table。非常感谢任何帮助。
Table:
ID KH1 KH2 KH3 KH4 KH5 KH6
001 A2 B1 C1 D1 E1 F1
002 F1 A1 B1 D1 E1 G1
003 A1 B1 D1 E1
004 XX XX XX XX XX XX
005 AA AB AC A2 XX
006 XX XX XX A1
007 XX XX XX XX A1 XX
008 XX XX AE XX XX AC
结果:
ID KH1 KH2 KH3 KH4 KH5 KH6
001 A2 B1 C1 D1 E1 F1
002 F1 A1 B1 D1 E1 G1
003 A1 B1 D1 E1
005 AA AB AC A2 XX
006 XX XX XX A1
007 XX XX XX XX A1 XX
您需要一个 WHERE 子句来检查 6 列中的每一列:
SELECT *
FROM tablename
WHERE KH1 IN ('A1', 'A2')
OR KH2 IN ('A1', 'A2')
OR KH3 IN ('A1', 'A2')
OR KH4 IN ('A1', 'A2')
OR KH5 IN ('A1', 'A2')
OR KH6 IN ('A1', 'A2');
如果要检查的列很多,这将无法很好地扩展。
如果您重新设计 table 以便每行仅包含 KH?
列中的 1 列,那就更容易了。
像这样:
ID nr KH
001 1 A2
001 2 B1
001 3 C1
001 4 D1
001 5 E1
001 6 F1
您可以为此使用 DAO:
Public Function SelectRecords()
Dim Records As DAO.Recordset
Dim Field As DAO.Field
Set Records = CurrentDb.OpenRecordset("Select * From YourTable")
While Not Records.EOF
For Each Field In Records.Fields
Select Case Field.Value
Case "A1", "A2"
Exit For
End Select
Next
If Not Field Is Nothing Then
' Output record.
Debug.Print Records.Fields(0).Value, Field.Name, Field.Value
Set Field = Nothing
End If
Records.MoveNext
Wend
Records.Close
End Function