2014-01-28 61 views
1

我是一名高中數學老師和我學校的「數據專家」。我在Microsft Exel和Access中自學成才,最近我正在學習通常的Access工作背後的一些SQL查詢語言。我很樂於使用Access查詢將多個來源的數據綁定在一起,例如來自一個來源的考試成績,來自第二個來源的英語水平和來自第三個來源的家庭電話號碼。來自多個表格的最大值

這是我不知道如何在Microsoft Access中執行的情況。

我數學的學生每年參加紐約州考試的次數高達3次。他們需要80分才能被視爲「大學準備好」。

這裏有3個樣品表。每個表使用唯一主鍵「StudentID」。綜合代數考試的代碼是MXRE。

Table #1 name: JanuaryAlgebra 

StudentID Course Mark  
201   MXRE  90 
202   MXRE  55 
203   MXRE  67 
204   MXRE  80 
205   MXRE  78 

注意:201號和204號學生已經完成考試,不要再考試。

Table #2 name: JuneAlgebra 

StudentID Course Mark 
202   MXRE  70 
203   MXRE  76 
205   MXRE  81 
206   MXRE  86 
207   MXRE  78 

學校有兩名新生,#206和#207。 205號和206號學生已經以高分完成了考試,其餘三名學生第三次參加考試。

表#3名:AugustAlgebra

StudentID Course Mark 
202   MXRE  72 
203   MXRE  83 
207   MXRE  93 

我如何返回查詢與一條線每個StudentID學年結束後展示自己最高的考試成績???

謝謝!

  • 傑夫
+1

我不認爲你可以在一個Access查詢中執行此操作(除非你有另一個包含所有學生id的表)。您是否考慮切換到另一個數據庫,如SQL Server Express(也是免費的)? –

回答

1

我不熟悉的訪問,但我認爲它支持T-SQL。如果是這樣,那麼你可以選擇一個語句中的所有行並獲取最大值。

 
SELECT StudentId, Course, Max(Mark) 
FROM (
    SELECT StudentId, Course, Mark FROM JanuaryAlgebra 
    UNION 
    SELECT StudentId, Course, Mark FROM JuneAlgebra 
    UNION 
    SELECT StudentId, Course, Mark FROM AugustAlgebra 
) as NewTable 
GROUP BY StudentId, Course
+0

爲了記錄,Access SQL和T-SQL(對於SQL Server)是非常不同的,但是您的答案中的查詢應該在Access SQL中正常工作。 –

1

我建議修改表結構:

YourTable (Student_ID,Course,Mark,Date) 

雖然我寫這個答案,它可能是一個子選擇

在SQL它會看起來像時更容易實現然後你可以簡單地查詢:

SELECT Student_ID,Course,MAX(Mark) AS Max_Mark 
FROM YourTable 
--WHERE Course = 'MXRE' --If you wanted only algebra results. 
GROUP BY Student_ID,Course 

多個相同結構的表幾乎都是ne ver是有道理的。

但是,您可以使用您當前的格式將子查詢中的所有表結合在一起來完成此操作。