2

この問題の解決に役立つ答えが見つかりません。私は私の大学の組織の一員であり、学期ごとに必要な会議の出席基準を満たすことを学生に要求しています。学生がこの基準を満たしているかどうかを追跡するために、必要な会議を欠席したすべての学生のリストと、日付 x と y の間に欠席した会議の数を示すレポートを作成したいと考えています。

私が書いた次のクエリは、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 に入力すると、次のエラーが表示されます。

データベースは Oracle 11gxe でホストされており、ODBC を実行して MS Access 2007 でレポートを作成しています。ODBC アカウント名 (Student が BAP_Student になる) ごとに更新されたテーブル タイトルで同じクエリを試しましたが、問題は解決しません。

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

1

クエリはすでに Oracle で機能しているため、Access の「パス スルー」クエリを作成して、そのクエリの結果を返すように Oracle に直接要求することができます。そうすれば、クエリを Oracle から Access SQL に変換する必要がなくなります。

または、さらに簡単に、そのクエリに基づいて Oracle ビューを作成します。次に、Access からビューへの ODBC リンクを作成します。

Access SQL に変換する必要がある場合、db エンジンでは、複数の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 のクエリ デザイナーを使用して結合を設定することをお勧めします。これは、db エンジンを満足させる括弧の規則を認識しており、その詳細を処理できます。

他の問題が発生する場合があります。たとえば、Access は#文字を使用して日付/時刻の値を区切ります。したがって、Access がフィールドを日付/時刻型と見なす場合は、句event_dateで次のようなことを試してください...WHERE

    e.event_date > #2013-08-01#
AND e.event_date < #2013-12-01#
于 2013-08-28T20:22:13.260 に答える