下面的查詢是查詢的簡化版本,我有錯誤,下面顯示的這個較小的查詢有一個where子句,它有效地取消了我的左連接。SQL-複雜查詢左連接與哪裏
SELECT FC_Name, COUNT(F.Findings_ID) AS 'No_of_Findings'
FROM FindingCategories AS FC
LEFT OUTER JOIN Findingsubcategories AS FSC ON FSC.FC_ID = FC.FC_ID
LEFT OUTER JOIN Findings AS F ON F.FSC_ID = FSC.FSC_ID AND F.AU_ID = @Audit_ID
LEFT OUTER JOIN Audit AS A ON A.Audit_ID = F.AU_ID
GROUP BY FC_Name
現在 - 不幸的是,我不能使用此查詢什麼,我想,做到: 我需要抓住我的數據庫中的信息爲當前選擇,並從上年的值。如下圖所示:
SELECT A.Audit_ID, c.FC_Name, COUNT(c.FC_Name) AS 'No_of_Findings'
FROM Audit AS A
LEFT OUTER JOIN Findings F on A.Audit_ID = f.AU_ID
LEFT OUTER JOIN FindingCategories C on C.FC_ID = F.Findings_category_ID
LEFT OUTER JOIN GovernmentAgencies GA on GA.GA_ID = A.GA_ID
LEFT OUTER JOIN AuditType AT on AT.AuditType_ID = a.AuditType_ID
WHERE A.Audit_Year= @Year AND (@Agency IS NULL OR ga.GA_LegalName = @Agency)
AND (@AuditType is null or @AuditType = AT.AuditType_Category)
AND (@Audit_ID is null or @Audit_ID = a.Audit_ID)
GROUP BY A.Audit_Year, c.FC_Name, A.Audit_ID
SELECT a.Audit_ID, c.FC_Name, COUNT(c.FC_Name) AS 'No_of_Findings'
FROM Audit AS A
LEFT OUTER JOIN Findings F on a.Audit_ID = f.AU_ID
LEFT OUTER JOIN FindingCategories C on C.FC_ID = F.Findings_category_ID
LEFT OUTER JOIN GovernmentAgencies GA on GA.GA_ID = a.GA_ID
LEFT OUTER JOIN AuditType AT on AT.AuditType_ID = a.AuditType_ID
WHERE a.Audit_Year= '@Year-1 AND (@Agency IS NULL OR ga.GA_LegalName = @Agency)
AND (@AuditType is null or @AuditType = AT.AuditType_Category)
GROUP BY a.Audit_Year, c.FC_Name, a.Audit_ID
再次,按我的第一個查詢我意識到我在哪裏打開我的左連接到內部聯接,但我已經嘗試了幾種不同的方法來解決這個問題無濟於事。我如何改變這個問題來解決這個問題?
樣本數據: 表1 /表2
什麼表1應該像 - 使用簡單的查詢:
所以,如果你的'select'查詢與所有的'LEFT OUTER JOIN's返回數據,但是當你添加一個'WHERE'子句,它不?這是個問題嗎?是否具有Audit_Year的子句總是返回false? – Ash
@Ashwin Nair No,本質上 - where子句將我的左連接變爲內連接,因此它刪除了我需要在C#中執行圖形的空值。 – Krono
好的。因爲我們無法看到你的數據,所以你需要找出哪些子句在這裏取消你的數據:WHERE A.Audit_Year = @Year AND(@Agency IS NULL or ga.GA_LegalName = @Agency) AND( @AuditType爲空或@AuditType = AT.AuditType_Category) AND(@Audit_ID爲null或@Audit_ID = a.Audit_ID)' – Ash