2015-04-02 17 views
0

我有兩個表 - tblSalaryBandtblSalaryBandYeartblSalaryBand.ID = tblSalaryBandYear.SalaryBandID連接。在tblSalaryBandYear之內,我有BandMax和BandMin的值,然後是ReviewYearID。因此,對於每個工資條,我可以每年有一個最大值和一個最小值。訪問2013年 - 一對多關係:顯示「一」側的所有值,並只選擇「多」側的值

我想要做的是列出所有薪金級別以及所選年份的最大值和最小值。然而,tblSalaryBandYear當年可能還沒有工資帶的價值。

我有一個連續的形式設置,我可以得到顯示所有薪金級別,即使他們沒有價值tblSalaryBandYear使用左連接:

SELECT tblSalaryBand.BandName, tblSalaryBandYear.BandMax, tblSalaryBandYear.BandMin, tblSalaryBand.ID AS SalaryBandID 
FROM tblSalaryBand LEFT JOIN tblSalaryBandYear ON tblSalaryBand.ID = tblSalaryBandYear.SalaryBandID; 

但是,當我試圖篩選他們通過ReviewYearID下降,如果tblSalaryBandYear中沒有值,他們根本不顯示。

SELECT tblSalaryBand.BandName, tblSalaryBandYear.BandMax, tblSalaryBandYear.BandMin, tblSalaryBand.ID AS SalaryBandID 
FROM tblSalaryBand LEFT JOIN tblSalaryBandYear ON tblSalaryBand.ID = tblSalaryBandYear.SalaryBandID 
WHERE (((tblSalaryBandYear.ReviewYearID)=[Forms]![frmHome]![SelectedYear])); 

是否有辦法讓所有薪資區域顯示,然後僅顯示所選評審年度中的BandMin和Max值?

回答

0

問題是,where子句有效地消除了沒有任何匹配的ReviewYearID的行(並且使連接表現得像內連接而不是左外連接)。

試試這個:

SELECT 
    tblSalaryBand.BandName, tblSalaryBandYear.BandMax, 
    tblSalaryBandYear.BandMin, tblSalaryBand.ID AS SalaryBandID 
FROM tblSalaryBand 
LEFT JOIN (
    SELECT * 
    FROM tblSalaryBandYear 
    WHERE ReviewYearID = [Forms]![frmHome]![SelectedYear] 
) AS SBY ON tblSalaryBand.ID = SBY.SalaryBandID 
+0

所以嘗試了第一個選項 - 訪問似乎不喜歡有[表格] [frmHome] [SelectedYear]在加入!。給我一個錯誤,說它不被支持。 第二個選項有效,但我不認爲它會在所有情況下拉出正確的記錄。如果我選擇一個沒有任何薪金記錄的年份,我只會得到顯示任何年份都沒有價值的樂隊。他們不是今年,但他們是空的。 – icouper 2015-04-02 16:04:56

+0

@icouper哦,我不知道Access不支持第一個查詢中的構造。我在第二個查詢中看到問題 - 讓我想一想 – jpw 2015-04-02 16:11:10

+0

我會做一些搜索,看看前者在Access中有沒有辦法工作,但是如果您有任何其他想法可以使用。 – icouper 2015-04-02 16:13:05

相關問題