我使用MSSQL Server 2008的 我有三個表如下:MSSQL嵌套查詢上一列中不同
表:項目 列:專案編號,{主鍵} ProjectNickName,BusinessType
表:審計 列:{外鍵} ProjectNickName,{主鍵} AuditID,AuditCreationDate,AuditStatus
表:調查結果 列:{外鍵} AuditID,FindingStatus,{主鍵} FindingNumber
項目來審覈:一對多
審計,以調查結果:一對多
我想找到的所有審覈記錄審計狀態爲「開放」,沒有發現「開放」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,它解決了這個問題,但是審計記錄仍然會顯示是否至少有一個發現沒有'Open'發現狀態,另一個發現與審計有關,DID有'Open'發現狀態。 如前所述,我只希望審計沒有發現記錄,並在結果集中顯示「Open」的查找狀態。
我在猜測我可能需要使用某種嵌套查詢與不同的功能,但我不能包裝我的頭腦如何做到這一點呢。
任何幫助非常感謝!我試圖儘可能清晰和準確,但讓我知道我是否可以詳細說明任何事情。
會返回多個行的審計與多個關閉查找 – Andomar
不,它不會!因爲我只在發現狀態等於'OPEN'並且只有左連接爲空的情況下才加入! – ingo
閱讀代碼的最後一行... – ingo