2013-03-20 55 views
1

我不確定我的問題是否足夠精確,所以我會解釋情況。如何在查詢上執行OUTER JOIN

我得到了2個表,我需要做一個左外連接來獲取數據,即使在沒有匹配的地方。我做了哪些工作正常,除了在這裏聲明一個歧視的查詢:

SELECT TableA.Type, SUM(TableB.HreReelles) AS HreReellesTotales, TableB.NoProjet_Short 
FROM TableA 
LEFT OUTER JOIN TableB ON TableA.IDType = TableB.IDType 
WHERE TableA.Categorie = 'Electrique' 
GROUP BY TableB.NoProjet_Short,TableA.Type 

現在我意識到我還需要得到只爲特定項目的記錄,但通過保持所有的「TableA.Type」即使在另一個表中沒有匹配,也可以從OUTER JOIN中刪除。如果我只添加「AND」語句,它會將它們從返回的記錄中刪除。如有必要,我會發布截圖;)。

哦,我將需要在最終確定時將它放入OleDbCommand。

感謝 西蒙

編輯:添加圖片。我不需要什麼是紅色的,但我需要其餘的包括空單元格(來自左外部連接)。

Expected data

+0

你可以張貼一些示例數據和預期的結果? – Taryn 2013-03-20 16:16:38

+0

@bluefeet剛剛發佈了屏幕截圖:) – Simon 2013-03-20 17:36:50

回答

1

我想你可能需要繞走很長的路要走:

SELECT TableA.Type, SUM(b.HreReelles) AS HreReellesTotales, 
     b.NoProjet_Short 
FROM TableA 
LEFT JOIN (SELECT * FROM TableB 
    WHERE TableB.ColumnName = 'SomeValue') b 
ON TableA.IDType = b.IDType 
WHERE TableA.Categorie = 'Electrique' 
GROUP BY b.NoProjet_Short,TableA.Type 
+0

非常感謝,它終於奏效了。我只是試圖在2 select之間應用連接,但無法做到這一點。你又救了我@Remou :)。 – Simon 2013-03-20 18:32:12

+0

感謝您撿起我的鬆懈! – 2013-03-20 19:48:21

+0

那麼它似乎只適用於Access,而不是OleDb對象。它說它找不到TableA。 – Simon 2013-03-20 20:22:21

3

用左連接查詢,你應該在「正確」的表中上的連接子句過濾行。

SELECT TableA.Type, SUM(TableB.HreReelles) AS HreReellesTotales, TableB.NoProjet_Short 
FROM TableA 
LEFT OUTER JOIN TableB ON TableA.IDType = TableB.IDType 
    AND TableB.ColumnName = 'SomeValue' 
WHERE TableA.Categorie = 'Electrique' 
GROUP BY TableB.NoProjet_Short,TableA.Type 
+0

似乎Access OU數據庫不支持OUTER JOIN中的「AND」:我正在使用Access 2000數據庫。我在Access中嘗試並在OleDbCommand中執行,並得到相同的錯誤:「不支持連接表達式」。 – Simon 2013-03-20 16:58:42

+0

我通常不會回答訪問問題,因爲我知道語法是不同的,我不太熟悉它。只是我,還是後來添加了訪問標籤? – 2013-03-20 19:47:46

+0

這不僅僅是你,他們是在編輯中添加的。 – Fionnuala 2013-03-20 19:51:44