Search code examples
vbams-accesswhere-clausesql-in

Filter Id that contain specific values in columns in MS Access


I am trying to filter rows from a table in MS Access using Query but with no success. I have below table below, I would like to generate a query based on the values "A1" and "A2" in any of the columns KH1 to KH6 columns. The results should look like below. I have used or condition in query but it is generating blank table in MS Access. Any help is much appreciated.

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

Result:

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

Solution

  • You need a WHERE clause that checks each of the 6 columns:

    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');
    

    This does not scale well if there are many columns to be checked.

    It would be easier if you redesigned the table so that each row contains only 1 of the KH? columns.
    Something like this:

    ID   nr KH
    001  1  A2
    001  2  B1
    001  3  C1
    001  4  D1
    001  5  E1
    001  6  F1