将基于内容的行与Access SQL中的另一个表行进行比较

时间:2013-11-25 16:57:36

标签: sql ms-access

嗨,我正在研究一个项目,出于时间限制的原因,我需要继续使用Access,这可能是我所有问题的根源,但也许有希望。

我有一个数据库,其中包含一个表ANSWERS,其中填写了用户“想要”的输入,有多个列,每个列对应一个不同问题的答案,询问他们是否,不关心,想要或需要什么。< / p>

EG:答案:

    Bacon  |  Ham   |  Sausage
  ________________________________
1     0        0          2
2     2        1          0
3     0        2          0
4     1        1          1

(0 =不关心,1 =想要,2 =需要)

我想将表Answers中的一行与Available表进行比较。

EG:可用:

    Bacon  | Ham    |  Sausage
   ________________________________
1    0        1           0
2    0        0           0
3    1        1           1
4    1        1           0

(0 =不可用,1 =可用)

所以我想比较来自Answers的第1行到可用,因为第1行包含sausage = 2然后我想要从Available获得第3行,因为sausage = 1.

我很高兴收到整行,或行ID和“1”表示匹配的行。

最终我需要为Answers中的每一行执行此操作。

任何想法都值得赞赏,我认为使用Intersect可能会有效,但因为这在访问中不起作用。我也考虑过加入表格,如有必要,我也可以更改数据变量或格式。

非常感谢

编辑:不关心以前不想要。为清楚起见改变了。

1 个答案:

答案 0 :(得分:1)

尝试一下: SELECT tblAnswers.UserID, IIf([tblAnswers].[bacon]>0 And [tblMenus].[Bacon]<>0,[MenuID],Null) AS BaconMenu, IIf([tblAnswers].[Ham]>0 And [tblMenus].[Ham]<>0,[MenuID],Null) AS HamMenu, IIf([tblAnswers].[Sausage]>0 And [tblMenus].[Sausage]<>0,[MenuID],Null) AS SausageMenu FROM tblAnswers, tblMenus WHERE (((IIf([tblAnswers].[bacon]>0 And [tblMenus].[Bacon]<>0,[MenuID],Null)) Is Not Null)) OR (((IIf([tblAnswers].[Ham]>0 And [tblMenus].[Ham]<>0,[MenuID],Null)) Is Not Null)) OR (((IIf([tblAnswers].[Sausage]>0 And [tblMenus].[Sausage]<>0,[MenuID],Null)) Is Not Null));

只需将其粘贴到SQL视图中创建查询窗口(更改表名和列名后与您的名称匹配)您显然需要根据实际需要进行调整,但它会根据您提供的数据进行调整。