访问SQL查询/表达式以比较SCRUM中相同表中的两个记录

时间:2016-10-07 15:38:10

标签: sql ms-access

我已经连续几天撞到墙上了。我觉得这应该很简单,但我一直在我创建的所有查询中找到循环漏洞。

示例数据

长话短说,通过一系列查询,我生成了一个类似于以下示例的数据集:

RequestID     Status
45            Completed
87            Completed
87            Acknowledged
87            In Progress
87            Blocked
99            New

示例结果

我的下一步是对此数据集运行查询,因此根据以下参数,每个Status只剩下一个SCRUM RequestID。因此,对于上面的例子,我希望我的结果显示:

RequestID     Status
45            Completed
87            Blocked
99            New

逻辑树

这是我的UML逻辑树,我似乎无法弄清楚如何转换为Access( 请注意: 我只是展示了未来读者的整个逻辑树。对于我的故障排除,案例1,2,4是我需要帮助转换为Access SQL查询的唯一唯一逻辑表达式)...

以下所有案例均基于每RequestID个基础。

  1. 如果特定RequestID的任何记录都有Status =“已屏蔽”;结果Status =“已屏蔽”。
  2. 如果特定RequestID的任何记录都有Status =“正在等待批准”且该特定RequestID的记录没有Status =“已屏蔽”;结果Status =“等待批准”。
  3. 如果特定RequestID的任何记录都有Status =“正在进行中”且该特定RequestID的记录没有Status =“已阻止”且没有特定RequestID的记录Status =“正在等待批准”;结果Status =“正在进行中”。
  4. 如果特定RequestID的任何记录都有Status =“已完成”并且该特定RequestID的ARE记录中有Status =“已确认”。 ..并且该特定RequestID的记录没有Status =“已屏蔽”且该特定RequestID的记录没有Status =“正在等待批准”;结果Status =“正在进行中”。
  5. 如果特定RequestID的任何记录都有Status =“已确认”且该特定RequestID没有记录Status =“被阻止”且不该特定RequestID的记录有Status =“正在等待批准”且该特定RequestID的记录没有Status =“已完成”并且没有该记录具体RequestID有一个Status =“正在进行中”;结果Status =“已确认”。
  6. 如果特定RequestID的任何记录都有Status =“新”且该特定RequestID的记录没有Status =“已阻止”并且没有该特定RequestID的记录有Status =“正在等待批准”且该特定RequestID的记录没有Status =“已完成”并且没有该记录具体RequestID有一个Status =“正在进行中”且该特定RequestID的记录没有Status =“已确认”;结果Status =“新”。
  7. 故障排除

    由于我在比较表中的多行,可能需要self-join?或者也许可以使用IIF语句来生成Status字段?我不知道。我做的每一次尝试似乎都失败了,所以在这一点上我真的很喜欢有人如何在Access中做到这一点!

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

SELECT RequestID, 
Min(IIf([status]="Blocked",Yes)) AS B, 
Min(IIf([status]="Awaiting approval",Yes)) AS W, 
Min(IIf([status]="In Progress",Yes)) AS IP, 
Min(IIf([status]="Completed",Yes)) AS C, 
Min(IIf([status]="acknowledged",Yes)) AS Ack, 
Min(IIf([status]="New",Yes)) AS N, 
Switch([B],"Blocked",[W],"Awaiting Aproval",[IP],"In Progress",[C] And [Ack],"In Progress",[Ack],"Acknowledged",[N],"New") AS Result
FROM Status
GROUP BY RequestID;

这并没有解决上面的问题 - 它将结果留空了已完成但未确认为空白 - 但是一旦更好地定义规则,您应该能够修改逻辑。