Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按条件筛选数据并在MsAccess中使用SQL显示说明的最佳方法?_Sql_Ms Access_Filtering - Fatal编程技术网

按条件筛选数据并在MsAccess中使用SQL显示说明的最佳方法?

按条件筛选数据并在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

我在MS Access中有一个包含调查结果的数据表,还有一个风险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
我的风险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和代码匹配时的人员和描述我还没有写这篇文章。

实现这一目标的最佳方式是什么? 我认为有两种可能性:

  • 设置15为每个风险ID查询一个,将描述添加到 然后将这15组结果合并在一起。这是什么 我知道该怎么做,但最终可能会一团糟
  • 使用
    if
    语句设置一些“检查”,然后设置一些how设置 该条目的风险代码字段
  • 我当前的SQL看起来是这样的,但它还没有进行任何检查,我担心if语句会非常非常长

    这是最好的方法吗?我甚至需要一个风险代码吗


    我有点不知道如何以最好的方式生成此“检查”。

    我不完全确定您的意图,但从您发布的内容和后续评论来看,一旦您为每个调查结果确定了风险代码,那么将风险代码加入风险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,因此您可以在风险类型表中查找活动和位置。