按条件筛选数据并在MsAccess中使用SQL显示说明的最佳方法?
我在MS Access中有一个包含调查结果的数据表,还有一个风险ID查找表和基于调查结果的风险类别描述 到目前为止,我一直在尝试从我的调查表中选择不同的条目,并在我的查询中输入一个新字段,以查找风险代码,其编号将取决于我确定的标准,然后我将使用这些标准来查找风险 我的调查表如下所示:按条件筛选数据并在MsAccess中使用SQL显示说明的最佳方法?,sql,ms-access,filtering,Sql,Ms Access,Filtering,我在MS Access中有一个包含调查结果的数据表,还有一个风险ID查找表和基于调查结果的风险类别描述 到目前为止,我一直在尝试从我的调查表中选择不同的条目,并在我的查询中输入一个新字段,以查找风险代码,其编号将取决于我确定的标准,然后我将使用这些标准来查找风险 我的调查表如下所示: Name | Location | Days spent eating IceCream | Icecream eating location John Smith | London | 30
Name | Location | Days spent eating IceCream | Icecream eating location
John Smith | London | 30 | Hull
RiskID | RiskBool | Description
1 | Yes | At risk - This person eats too much icecream
2 | Yes | Risk - This person does not eat enough icecream
3 | No | Sensible amount of icecream eaten
4 | Yes | It is illegal to eat icecream in Hull
我的风险ID表如下所示:
Name | Location | Days spent eating IceCream | Icecream eating location
John Smith | London | 30 | Hull
RiskID | RiskBool | Description
1 | Yes | At risk - This person eats too much icecream
2 | Yes | Risk - This person does not eat enough icecream
3 | No | Sensible amount of icecream eaten
4 | Yes | It is illegal to eat icecream in Hull
在access设计视图中,我的查询看起来是这样的
Name | Location | Risk Code | RiskID | Description
我想编写SQL将风险代码更改为1、2、3、4(在我的实际案例中,最多15),然后我将告诉它仅显示风险ID和代码匹配时的人员和描述我还没有写这篇文章。
实现这一目标的最佳方式是什么?
我认为有两种可能性:
if
语句设置一些“检查”,然后设置一些how设置
该条目的风险代码字段我有点不知道如何以最好的方式生成此“检查”。我不完全确定您的意图,但从您发布的内容和后续评论来看,一旦您为每个调查结果确定了风险代码,那么将风险代码加入风险ID的过程似乎相对简单 真正的问题似乎是如何封装逻辑以识别每个调查结果的风险代码。我建议在查询外部“计算”每个调查结果的风险代码值,然后在最终加入风险ID之前加入这些结果 例如,我可能会将第三个表添加到包含
Name
和Risk code
的设计SurveyRisk
使用您需要使用的任何标准和逻辑来识别每个调查响应的风险。将这些值输入到SurveyRisk
表中。然后,您只需将Survey
加入SurveyRisk
加入Risk
即可总结您的结果
请随时澄清我对您的目标有何误解,我将相应地编辑我的帖子。最好的方法是使用一个模拟数据结构的查找表 为每个“案例”添加一行,并在MS Access中将相应字段链接在一起 以下是一些链接: 然后修改SQL,将需要组合的任何选项配对。例如,我所做的每项检查都在两个不同的位置重复 以下是一个例子:
FROM RiskDescLookupReg
INNER JOIN ([Survey Raw Data]
INNER JOIN [At Risk Employee List]
ON [Survey Raw Data].ResID=[At Risk Employee List].[Staff ID])
ON (RiskDescLookupReg.RegTravelChoice=[Survey Raw Data].RegTravelChoice)
And (RiskDescLookupReg.MonthChoice2=[Survey Raw Data].MonthChoice2
And RiskDescLookupReg.PercentageTimeChoice2=[Survey Raw Data].PercentageTimeChoice2
And RiskDescLookupReg.LimitedDurationChoice2=[Survey Raw Data].LimitedDurationChoice2
And RiskDescLookupReg.TemporaryPurposeChoice2=[Survey Raw Data].TemporaryPurposeChoice2)
Or (
RiskDescLookupReg.MonthChoice1=[Survey Raw Data].MonthChoice1
And RiskDescLookupReg.PercentageTimeChoice1=[Survey Raw Data].PercentageTimeChoice1
And RiskDescLookupReg.LimitedDurationChoice1=[Survey Raw Data].LimitedDurationChoice1
And RiskDescLookupReg.TemporaryPurposeChoice1=[Survey Raw Data].TemporaryPurposeChoice1)
SELECT
[At Risk Employee List].Number,
FIRST([At Risk Employee List].Employee) AS Name,
FIRST([At Risk Employee List].[Base Location]) AS BaseLocation,
LAST(RiskDescLookupReg.RiskBool) AS RiskBool,
LAST(RiskDescLookupReg.RiskDesc) AS RiskDesc,
不是每个位置都有两个区块。如果我只有一个感兴趣的地方,我可以放弃最后一个街区
如果由于查找表的排列方式而获得重复,则需要指定查找表中的零件包含在LAST
中,调查中的零件包含在FIRST
中。以下是一个例子:
FROM RiskDescLookupReg
INNER JOIN ([Survey Raw Data]
INNER JOIN [At Risk Employee List]
ON [Survey Raw Data].ResID=[At Risk Employee List].[Staff ID])
ON (RiskDescLookupReg.RegTravelChoice=[Survey Raw Data].RegTravelChoice)
And (RiskDescLookupReg.MonthChoice2=[Survey Raw Data].MonthChoice2
And RiskDescLookupReg.PercentageTimeChoice2=[Survey Raw Data].PercentageTimeChoice2
And RiskDescLookupReg.LimitedDurationChoice2=[Survey Raw Data].LimitedDurationChoice2
And RiskDescLookupReg.TemporaryPurposeChoice2=[Survey Raw Data].TemporaryPurposeChoice2)
Or (
RiskDescLookupReg.MonthChoice1=[Survey Raw Data].MonthChoice1
And RiskDescLookupReg.PercentageTimeChoice1=[Survey Raw Data].PercentageTimeChoice1
And RiskDescLookupReg.LimitedDurationChoice1=[Survey Raw Data].LimitedDurationChoice1
And RiskDescLookupReg.TemporaryPurposeChoice1=[Survey Raw Data].TemporaryPurposeChoice1)
SELECT
[At Risk Employee List].Number,
FIRST([At Risk Employee List].Employee) AS Name,
FIRST([At Risk Employee List].[Base Location]) AS BaseLocation,
LAST(RiskDescLookupReg.RiskBool) AS RiskBool,
LAST(RiskDescLookupReg.RiskDesc) AS RiskDesc,
使用
LAST
可以确保,如果有人会被认为有风险而没有风险,则只显示LAST
有风险案例(这些条目稍后在字段中出现)。这与显示重复项时的情况相反,风险项首先出现。匹配项来自何处?我在调查表中看不到任何风险id。请发布您的SQL。恐怕不行。风险代码与其他表格的关系在哪里?RiskDescLookup.RiskExplaution是否是具有风险ID的风险因素?我担心您已将数据伪装到无法理解的程度。例如,很可能从表中选择,“检查”将找到限制、上限和下限之间的table.value
风险代码
,然后使用风险ID
将风险代码
与风险解释
匹配。不幸的是,我需要运行的检查比单个数字更复杂,我将进行编辑以明确这一点。您似乎需要的是一个长长的风险表。位置、活动、风险ID,因此您可以在风险类型表中查找活动和位置。