我需要撰寫一個查詢來顯示一個月的所有收入中心,無論他們是否有收入。這似乎是一個簡單的要求,但我似乎碰到了一堵墻。下面是我的 SQL:
SELECT ID_ItemNominal, ItemNominal_Description, Sum(Nz([ITM_Net],0)) AS ITM_Net_Total
FROM TSub_ItmNominal LEFT JOIN (T_Invoice RIGHT JOIN T_LineItems ON T_Invoice.ITM_Reference = T_LineItems.ITM_Reference) ON TSub_ItmNominal.ID_ItemNominal = T_LineItems.ITM_Nominal
WHERE (((Year([ITM_Date]))=[report_year] Or (Year([ITM_Date])) Is Null) AND ((Month([ITM_Date]))=[report_month]))
GROUP BY TSub_ItmNominal.ID_ItemNominal, TSub_ItmNominal.ItemNominal_Description
HAVING (((TSub_ItmNominal.ID_ItemNominal) Like "4*"))
ORDER BY TSub_ItmNominal.ID_ItemNominal;
- ID_ItemNominal = 收入中心的整數代碼
- ItemNominal_Description = 收入中心的描述
- ITM_Net = 發票行專案的貨幣金額,
SUM為一個月的總計 - ITM_ 日期 = 發票日期
我的想法是用LEFT JOIN表示我想查看所有的收入中心,即使這些記錄沒有當月的任何資料。我得到的是那些年有收入但當月沒有收入的中心沒有顯示/過濾掉。
當前查詢提供的內容:
40500 | Sales - Digital | $###.##
40700 | Sales - Misc | $###.##
40800 | Sales - Mail | $###.##
40900 | Sales - Clothing| $0.00
到目前為止,我們今年還沒有獲得任何收入,40900因此它在查詢中顯示為結果。我們今年有收入,40600但 4 月份沒有。40600似乎被查詢的一部分以及我們有當年收入但沒有選定日期的任何其他收入中心過濾掉了WHERE。
我希望看到這些收入中心包含在查詢中,但當月顯示為 0.00 美元。
任何幫助將不勝感激,我覺得我很接近,但我似乎無法得到正確的結果。先感謝您!
uj5u.com熱心網友回復:
您可以將原始表與所有行連接起來,并將您的查詢連接到它,就像
SELECT t1.ID_ItemNominal, t1.ItemNominal_Description,t2.ITM_Net_Total
FROM TSub_ItmNominal AS t1 LEFT JOIN (SELECT ID_ItemNominal, ItemNominal_Description, Sum(Nz([ITM_Net],0)) AS ITM_Net_Total
FROM TSub_ItmNominal LEFT JOIN (T_Invoice RIGHT JOIN T_LineItems ON T_Invoice.ITM_Reference = T_LineItems.ITM_Reference) ON TSub_ItmNominal.ID_ItemNominal = T_LineItems.ITM_Nominal
WHERE (((Year([ITM_Date]))=[report_year] Or (Year([ITM_Date])) Is Null) AND ((Month([ITM_Date]))=[report_month]))
GROUP BY TSub_ItmNominal.ID_ItemNominal, TSub_ItmNominal.ItemNominal_Description
HAVING (((TSub_ItmNominal.ID_ItemNominal) Like "4*")) ) AS t2 ON t1.ID_ItemNominal = t2.ID_ItemNominal
WHERE ((([t1l].[ID_ItemNominal]) Like "4*"))
ORDER BY t1.ID_ItemNominal;
uj5u.com熱心網友回復:
通常,當您運行LEFT JOIN 時,您WHERE會運行類似的INNER JOIN. 但是根據您的規范,應該選擇加入子專案表,因為它可以包含并非詳盡無遺的所有收入中心的實際銷售資料。
因此,WHERE在子查詢中運行過濾,然后將此子查詢加入到主要的收入中心集。此外,為了便于閱讀,下面將轉換RIGHT JOIN為LEFT JOIN并使用表別名而不是完整的表名。
SELECT main.ITM_Nominal,
main.ItemNominal_Description,
SUM(NZ(sub.[ITM_Net], 0)) AS ITM_Net_Total
FROM (T_LineItems AS main
LEFT JOIN T_Invoice AS inv
ON inv.ITM_Reference = main.ITM_Reference)
LEFT JOIN (
SELECT ID_ItemNominal, [ITM_Net]
FROM TSub_ItmNominal
WHERE ID_ItemNominal ALIKE '4%'
AND YEAR([ITM_Date]) = [report_year]
AND MONTH([ITM_Date]) = [report_month]
) AS sub
ON sub.ID_ItemNominal = main.ITM_Nominal
GROUP BY main.ITM_Nominal,
main.ItemNominal_Description
ORDER BY main.ITM_Nominal;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/497033.html
