2011-06-23 79 views
0

我需要在我的報告中說明10個可能的建築網站。然而,正如我的代碼現在,當一個建築工地不在我的數據庫中時,它根本沒有被記錄下來,這是有道理的,但我更希望列出所有可能的建築工地並將0作爲值沒有任何回報。我需要這樣做的原因是因爲我正在根據這些查詢創建報告,除非我始終將所有建築網站都統計到每一次,否則很難將所有內容都排除在外。這裏是SQL:SQL - 如何爲所有潛在ID創建查詢帳戶

TRANSFORM Count(Main.ID) AS CountOfID 
SELECT 'Total IDs' AS [Construction site >>>] 
FROM Research INNER JOIN Main ON Research.Primary_ID = Main.ID 
GROUP BY 'Total IDs' 
PIVOT Research.Construction_site; 

順便說一下,我使用MS Access 2007是有所作爲。

謝謝

+0

如果你使用的是MS Access,那你爲什麼在標籤中指定'mysql'?那是偶然的嗎? –

+0

不,我只是以爲有人知道mysql可能知道如何做到這一點,但我刪除了標籤。 – jerry

+0

下表列出了所有建築工地? –

回答

1

如果我正確地讀取您的問題,則需要Research表中的所有字段,而不管它們是否位於Main表中。在這種情況下,你只需要一個LEFT OUTER JOIN

TRANSFORM Count(Main.ID) AS CountOfID 
SELECT 'Total IDs' AS [Construction site >>>] 
FROM Research LEFT OUTER JOIN Main ON Research.Primary_ID = Main.ID 
GROUP BY 'Total IDs' 
PIVOT Research.Construction_site; 

這將從Research表中返回所有行至少一次 - 如果它們存在於Main表不止一次和多次

+0

Jet/ACE的SQL方言忽略了LEFT OUTER JOIN中的OUTER,並將其同樣視爲LEFT JOIN。 –

+0

很高興知道,我沒有意識到這一點。所以我想上面的內容仍然是正確的,但可以只是左連接而已。感謝您的評論。 :) – Jaymz

0

大多數情況下,您可能需要將INNER JOIN替換爲LEFT JOIN。 (即只需將'INNER'改爲'LEFT')。這樣,Main中沒有代表的建築工地就不會被過濾掉。

+0

這不起作用,INNER JOIN是否從研究表中的Lookup中讀取潛在值?基本上我現在擁有的就是查找所有潛在的價值,但是當我編輯代碼時,它仍然只顯示具有價值的建築工地。編輯:查找是在研究表 – jerry

+0

INNER JOIN結果在兩側相互匹配的行。 LEFT JOIN返回INNER JOIN返回的所有行以及左側(Research)在右表(Main)中沒有匹配的行。對於這樣的行,右表中的相應列有NULL。 –

+0

這就是說,我不明白爲什麼LEFT JOIN不適合你。也許使用它與pivoting有它自己的特點,不知道。 (我從來沒有在Access中做過旋轉操作。) –