【发布时间】:2011-08-03 01:54:36
【问题描述】:
我使用的是 MSSQL Server 2008。 我有如下三个表:
表:项目 列:ProjectID、{Primary Key} ProjectNickName、BusinessType
表格:审核 列:{Foreign Key}ProjectNickName、{Primary Key}AuditID、AuditCreationDate、AuditStatus
表格:调查结果 列:{Foreign Key}AuditID、FindingStatus、{Primary Key}FindingNumber
要审计的项目:一对多
审计结果:一对多
我想查找所有 AuditStatus 为“Open”且没有任何结果为“Open”FindingStatus 的审计记录。此外,审计记录必须与 BusinessType 为“External”且 AuditCreationDate 在过去 30 天内的项目相关联。
这是我目前所拥有的:
Select a.AuditID, p.BusinessType, p.ProjectNickName, a.AuditCreationDate
FROM Project p
INNER JOIN Audit a ON p.ProjectNickName = a.ProjectNickName
LEFT OUTER JOIN Findings f on a.AuditID = f.AuditID
WHERE p.BusinessType LIKE 'External' AND AuditCreationDate >= GETDATE()-30
AND a.AuditStatus LIKE 'OPEN' and f.FindingStatus NOT LIKE 'OPEN'
上面的查询有两个问题。
- 每次审核可能有多个结果,但如果其中任何一个结果的状态为“未决”,我不希望显示该记录。
- 上面没有显示不同的审计记录。如果审核的多个结果不是“打开”状态,它将显示出来。我只想要不同的审计记录。我查看了以下DISTINCT for only one Column,它解决了该问题,但审核记录仍会显示是否至少有一个发现没有“打开”findingStatus 和另一个与 DID 有“打开”的审核相关的发现' 发现状态。 如前所述,我只希望没有结果记录且结果状态为“打开”的审核出现在我的结果集中。
我猜我可能需要使用某种具有独特功能的嵌套查询,但我现在还想不通如何去做。
非常感谢任何帮助!我尽量做到清晰和准确,但如果我能详细说明,请告诉我。
【问题讨论】:
标签: sql-server sql-server-2008 nested