嗨,我正在研究一个项目,出于时间限制的原因,我需要继续使用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可能会有效,但因为这在访问中不起作用。我也考虑过加入表格,如有必要,我也可以更改数据变量或格式。
非常感谢
编辑:不关心以前不想要。为清楚起见改变了。
答案 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视图中创建查询窗口(更改表名和列名后与您的名称匹配)您显然需要根据实际需要进行调整,但它会根据您提供的数据进行调整。