私の現在のSQL:
select s.dcid, substr(s.lastfirst,0,3), to_char(a.att_date, 'mm/dd/yyyy'), a.periodid, p.name, a.attendance_codeid, ac.att_code, count(*)
from students s
join attendance a on s.id = a.studentid
join period p on a.periodid = p.id
join attendance_code ac on a.attendance_codeid = ac.id
WHERE ac.att_code IS NOT NULL
AND s.schoolid = 109
AND s.enroll_status = 0
AND s.student_number = 100887
AND a.att_date >= to_date('08/15/2013', 'mm/dd/yyyy')
group by s.dcid, s.lastfirst, to_char(a.att_date, 'mm/dd/yyyy'), a.periodid, p.name, a.attendance_codeid, ac.att_code
出力:
count(*) 列がある各レコードに順番に番号を付けて、新しいグループごとに 1 から出力し、グループの一番下に合計を入れたいと思いますが、その方法がわかりません。 . グループのさまざまな部分で式によるロールアップを試みましたが、日付、ピリオド ID などの小計が表示されてしまいます...学生 (s.dcid または s.lastfirst のいずれか) のみを合計する必要があります。
[リクエストごとの追加情報...]
ある日付範囲内に一定数の出席記録を持つ学生をエンド ユーザーが検索できるレポートを作成したいと考えています。たとえば、エンド ユーザーが 2013 年 10 月 1 日から 2013 年 10 月 31 日までの間に 20 回欠席した学生を検索したい場合、att_code は A、C、E、G のいずれかになります。レポートが実行されると、 、不在が発生した日付と、見つかったレコードが実際に検索条件に一致することを視覚的に確認するために使用されたコードを表示したいと思います。
出力は、COUNT(*) 列を除いて、現在の出力のように見えるはずです。ここで、私は今電話を切っています。row_number が各レコードに順番に番号を付ける方法が気に入っていますが、グループ (学生) が変わったときに順番番号をリセットする方法をまだ探しています。
例えば...
DCID S.LASTFIRST A.ATT_DATE PERIODID NAME ATT_CODE COUNT(or # or Num...)
1006 Aco 08/29/2013 1704 4 W 1
1006 Aco 09/03/2013 1701 1 6 2
1006 Aco 09/05/2013 1706 6 G 3
...
1006 Aco 10/04/2013 1706 6 z 20
2543 Bro 08/29/2013 1704 4 W 1
2543 Bro 09/03/2013 1701 1 6 2
2543 Bro 09/05/2013 1706 6 G 3
...
2543 Bro 10/04/2013 1706 6 z 20
3121 Com 08/29/2013 1704 4 W 1
3121 Com 09/03/2013 1701 1 6 2
3121 Com 09/05/2013 1706 6 G 3
...
3121 Com 10/04/2013 1706 6 z 20
もちろん、この例では、3 つのグループのそれぞれの行番号 4 ~ 19 を「...」に置き換えて、出力を省略しています。これを文字通り出力したくはありません。