在 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