私は、スポーツや学校での活動に参加した学生の毎日の出席(期間1〜10)を取得する以下の問合せを持っています。私はその期間のうちの少なくとも1つの欠席の学生を見たいと思うので、すべての期間の出席コードがNULLの場合、出席してはいけません。私はどのようにクエリにそれを追加するか分からない。誰も助けることができますか?Oracle SQL問合せヘルプ - 学生の出席
SELECT DISTINCT
s.student_number AS "Student Number",
s.lastfirst AS "Student Name",
DECODE(s.grade_level,-1,'PK',0,'KG',s.grade_level) AS "Grade",
s.home_phone AS "Phone",
DECODE(s.schoolid,280050,'Kodiak High School',s.schoolid) AS "School",
(SELECT DISTINCT co.course_name FROM ps.courses WHERE co.course_number=se.course_number AND se.course_number LIKE 'CLB%' OR se.course_number LIKE 'ACT%') AS "Course Name",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='1') AS "Per. 1",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='2') AS "Per. 2",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='3') AS "Per. 3",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='4') AS "Per. 4",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='5') AS "Per. 5",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='6') AS "Per. 6",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='7') AS "Per. 7",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='8') AS "Adv",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='9') AS "Act",
(SELECT listagg(attm.att_code,'|') within group (order by attm.att_code) FROM pssis_attendance_meeting attm WHERE attm.att_date=to_date(SYSDATE) AND attm.studentid=s.id AND attm.att_code IS NOT NULL AND attm.period_number='10') AS "Clb"
FROM attendance att
JOIN students s ON s.id=att.studentid
INNER JOIN cc ON s.ID=cc.studentid
INNER JOIN sections se ON cc.sectionid = se.id
JOIN courses co ON co.course_number=se.COURSE_NUMBER
WHERE att.att_date=to_date(SYSDATE)
AND att.schoolid in '280050'
AND s.enroll_status=0
AND cc.termid = 2700
AND se.course_number LIKE 'ACT%'OR se.course_number LIKE 'CLB%'
ORDER BY s.lastfirst
ここにデータのサンプルを示します。私はすべてのピリオドがNULLのときに行を見たくない。彼らに欠席コードがある場合のみ。私はあなたが扱っているデータについては非常に非常に少しを知っている一方で、私は出発点としてこれを提案したいData Sample
Yikes!以下を参照してください:「いくつかのシンプルなSQLルールを使用する」(http://weblogs.sqlteam.com/jeffs/archive/2006/03/14/9289.aspx)および/または [なぜ私はDISTINCTが嫌いなのですか?(http://weblogs.sqlteam.com/markc/archive/2008/11/11/60752.aspx)& "decode"は学ぶのには大したことではありません。好ましい。あなたは 'group by'節と' having'節が必要ですが、私はそれを言って残念ですが、 "新鮮なもの" –
'pssis_attendance_meeting'テーブルからのデータのサンプルを(テキストではなくテキストで)見ることができますか?ご質問ください。包括的な回答が必要な場合は、他のテーブルのデータのサンプルも役立ちます。 –
質問の中で見栄えの良いように表を書式設定するには、各行の左側に4つのスペースが必要です。または、ツールバーのこのボタン「{}」を使用してください。あなたはいつでもサイトの使い方のヒントについては、脚注のヘルプリンクを見ることができます。 –