繁体   English   中英

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

[英]Access SQL Query / Expression to Compare Two Records in Same Table for SCRUM

几天来,我一直在用头撞墙。 我觉得这应该很简单,但我一直在我创建的所有查询中发现漏洞。

示例数据

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

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

示例结果

对我而言,下一步是在此数据集上运行查询,因此基于以下参数,每个RequestID仅保留一个 SCRUM Status 因此,对于上面的示例,我希望我的结果显示:

RequestID     Status
45            Completed
87            Blocked
99            New

逻辑树

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

以下所有情况均基于每个RequestID

  1. 如果特定RequestID任何记录具有Status ="Blocked"; 结果Status为“已阻止”。
  2. 如果特定RequestID任何记录的Status =“Awaiting Approval”,并且该特定RequestID记录没有Status为 =“Blocked”; 结果Status为 =“等待批准”。
  3. 如果特定RequestID任何记录的Status ="In Progress" 并且该特定RequestID记录没有Status为 ="Blocked" 并且该特定RequestID记录没有Status为="Awaiting Approval"; 结果Status为 =“进行中”。
  4. 如果特定RequestID任何记录的Status =“已完成”,并且该特定请求RequestID记录Status为 =“已确认”......并且该特定请求RequestID记录没有Status为“已阻止”且没有该特定RequestID记录Status为 ="Awaiting Approval"; 结果Status为 =“进行中”。
  5. 如果特定RequestID任何记录具有Status ="Acknowledged" 并且该特定RequestID记录没有Status为 ="Blocked" 并且该特定RequestID记录没有Status为 ="Awaiting Approval" 并且没有记录特定RequestIDStatus为 ="Completed" 并且该特定RequestID记录没有Status为 ="In Progress"; 结果Status为 =“已确认”。
  6. 如果特定RequestID任何记录具有Status ="New" 并且该特定RequestID记录没有Status为 ="Blocked" 并且该特定RequestID记录没有Status为 ="Awaiting Approval" 并且没有记录特定RequestIDStatus为 ="Completed" 并且该特定RequestID记录没有Status为 ="In Progress" 并且该特定RequestID记录没有Status为="Acknowledged"; 结果Status为 =“新”。

故障排除

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

任何帮助是极大的赞赏。

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;

这与上面的问题无关 - 它使已完成的结果为空白,但未确认为空白 - 但是一旦您更好地定义规则,您应该能够修改逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM