2013-08-28 85 views
2

我無法找到解決此問題的答案。我是我大學組織的一員,每個學期都要求我們的學生按照我們所要求的會議達到出席標準。爲了追蹤我們的學生是否符合這個標準,我想創建一份報告,向我顯示所有錯過任何必要會議的學生名單,以及他們在x和y日期之間錯過了多少次會議。sqlplus訪問語法問題

下面的查詢我所寫的作品很好,當我通過sqlplus中運行它

SELECT s.first_name, s.last_name, s.email, COUNT (A.student_mnumb) AS Attendance_Count 
FROM student_attendance A 
INNER JOIN student S 
ON S.student_M=A.student_Mnumb 
INNER JOIN event E 
ON e.event_name=a.event_name1 
WHERE e.event_date>'01-AUG-13' 
AND e.event_date<'01-DEC-13' 
AND e.student_req='Y' 
AND a.attend='N' 
GROUP BY s.first_name, s.last_name, s.email 
HAVING COUNT (A.student_mnumb) > 0; 

然而,當我進入這個查詢到Access我收到以下錯誤:在查詢表達式「語法錯誤(缺少運算符)' S.student_M = A.student_mnumb INNER JOIN事件E ON e.event_name = a.event_name'

我的數據庫是通過Oracle 11gxe託管的,我正在運行一個ODBC來在MS Access 2007上創建報告。我嘗試過與每個ODBC帳戶名稱更新的表標題相同的查詢(學生成爲BAP_Student)並且問題仍然存在。

任何幫助,非常感謝。謝謝!

回答

1

由於您的查詢已經在Oracle中工作,您可以創建一個Access「pass through」查詢,該查詢直接詢問Oracle以便讓您返回該查詢的結果。這種方式不需要將查詢從Oracle轉換爲Access SQL。

甚至更​​簡單,根據該查詢創建一個Oracle視圖。然後從Access中創建一個到該視圖的ODBC鏈接。

如果您確實需要轉換爲Access SQL,那麼數據庫引擎需要括號以用於包含多個JOIN的查詢。

FROM 
    (student_attendance A 
    INNER JOIN student S 
    ON S.student_M=A.student_Mnumb) 
    INNER JOIN event E 
    ON e.event_name=a.event_name1 

這樣的變化應該讓你過去的第一個語法錯誤。不過,我鼓勵您使用Access的查詢設計器來設置您的連接。它知道保持數據庫引擎高興的括號規則,並且可以爲您處理這些細節。

您可能會遇到其他問題。例如,Access使用#字符來分隔日期/時間值。所以,如果訪問看到event_date字段日期/時間類型,嘗試這樣的事情在你的WHERE條款等

e.event_date > #2013-08-01# 
AND e.event_date < #2013-12-01# 
+0

這完美地工作。謝謝! – Ian