2016-05-31 67 views
1

我有一個主要的部件#s列表,我試圖運行一個查詢,說明引用了多少次部件#以及它是多少次有序,但似乎我做錯了什麼。報價單和訂單ID號是唯一的,但總共有6500行,但對於某些零件,查詢似乎返回38000。計數子記錄在訪問中使用主記錄的次數sql

sqlselectstring = "Select dp.PartNumber, count (fqp.fk_spQuoteID) as [# Times Quoted],count(fop.fk_spOrderId) as [# Times Ordered] " & _ 
"From ((DimProduct As dp LEFT JOIN FactOrderProduct AS fop ON dp.PartNumber=fop.PartNumber) LEFT JOIN FactQuoteProduct as fqp on dp.PartNumber=fqp.PartNumber) " & _ 
"Group By dp.PartNumber;" 
+0

使用內嵌的意見獲得前計數連接。所有3個表格之間的基數是人爲地誇大了兩個加入者的數量。 – xQbert

+0

你應該使用內連接代表左連接 –

回答

0

由於DimProduct和其他兩個表之間的1-M,您可能需要您加入使用內嵌視圖之前獲得的計數:

SELECT dp.PartNumber 
     , FQPcnt as [# Times Quoted] 
     , FOPCnt as [# Times Ordered] 
FROM DimProduct As dp 
LEFT JOIN (Select PartNumber, count(fk_spOrderID) as FOPCnt FROM FactOrderProduct GROUP BY PartNumber) AS fop 
    ON dp.PartNumber=fop.PartNumber 
LEFT JOIN (Select PartNumber, count(fk_spQuoteID) as FQPCnt FROM FactQuoteProduct GROUP BY PartNumber) 
    fqp on dp.PartNumber=fqp.PartNumber 
Group By dp.PartNumber; 

或者您必須分別生成計數併合並結果;但是,讓多個記錄......

或(我不記得,如果獲得支持的話......)使用相關子查詢......

SELECT dp.PartNumber 
     , (Select count(fk_spQuoteID) as FQPCnt FROM FactQuoteProduct FQP WHERE dp.PartNumber=fqp.PartNumber) as [# Times Quoted] 
     , (Select count(fk_spOrderID) as FOPCnt FROM FactOrderProduct FOP WHERE DP.PartNumber=FOP.PartNumber) as [# Times Ordered] 
FROM DimProduct As dp 
+0

如果我沒有4個複製和粘貼錯誤,它也會有幫助。更正了fk_spQuoteID的名稱以及表FactQuoteProduct – xQbert

+0

Access支持相關的子查詢 - 這是我要給的答案,但沒有時間去測試它。 –

+0

謝謝我最終提出了單獨運行計數和聯合運行,但很高興知道有一個相關查詢,我可以在將來使用 –

0

試試這個:

sqlselectstring = "Select dp.PartNumber, count (fqp.fk_spQuoteID) as [# Times Quoted],count(fop.fk_spOrderId) as [# Times Ordered] " & _ 
"From ((DimProduct As dp INNER JOIN FactOrderProduct AS fop ON dp.PartNumber=fop.PartNumber) INNER JOIN FactQuoteProduct as fqp on dp.PartNumber=fqp.PartNumber) " & _ 
"Group By dp.PartNumber;" 
+0

給我結果相同 –