잘못된 출력 결과를 반환 목록을 저장할 특정 날짜PIVOT 기능은 내가라는 두 개의 테이블이
student_record_hist에 대한 클래스의 출석 항목을 저장합니다
class_record_hist 특정 클래스의 학생 출석. 여기에서 transaction_id가 두 테이블의 기본 키가됩니다.
내 데이터는 다음과 같습니다.
Working_date STUDENT_NAME STUDENT_STATUS ATTENDANCE_CODE TEACHER_UPDATE TRANSACTION_ID
------------- ------------ -------------- --------------- -------------- --------------
2017-11-10 10:00:00 JAMES ABSENT 2344 AB 23453
2017-11-10 10:00:00 PETER ABSENT 2344 AB 23453
2017-11-10 10:00:00 MURPHY PRESENT 1001 PR 23453
2017-11-10 10:00:00 MICA PRESENT 1001 PR 23453
2017-11-10 10:00:00 STELLA PRESENT 1001 PR 23453
2017-11-10 10:00:00 STEPHEN PRESENT 1001 PR 23453
2017-11-10 10:00:00 TRACY PRESENT 1001 PR 23453
2017-11-10 14:00:00 JAMES PRESENT 1001 PR 23454
2017-11-10 14:00:00 PETER PRESENT 1001 PR 23454
2017-11-10 14:00:00 MURPHY PRESENT 1001 PR 23454
2017-11-10 14:00:00 MICA PRESENT 1001 PR 23454
2017-11-10 14:00:00 STELLA PRESENT 1001 PR 23454
2017-11-10 14:00:00 STEPHEN PRESENT 1001 PR 23454
2017-11-10 14:00:00 TRACY ABSENT 2344 AB 23454
2017-11-11 11:24:00 JAMES PRESENT 1001 PR 23454
2017-11-11 11:24:00 PETER PRESENT 1001 PR 23454
2017-11-11 11:24:00 MURPHY PRESENT 1001 PR 23454
2017-11-11 11:24:00 MICA PRESENT 1001 PR 23454
2017-11-11 11:24:00 STELLA PRESENT 1001 PR 23454
2017-11-11 11:24:00 STEPHEN PRESENT 1001 PR 23454
2017-11-11 11:24:00 TRACY PRESENT 1001 PR 23454
2017-11-11 14:24:00 JAMES ABSENT 2344 AB 23454
2017-11-11 14:24:00 PETER ABSENT 2344 AB 23454
2017-11-11 14:24:00 MURPHY ABSENT 2344 AB 23454
2017-11-11 14:24:00 MICA ABSENT 2344 AB 23454
2017-11-11 14:24:00 STELLA ABSENT 2344 AB 23454
2017-11-11 14:24:00 STEPHEN PRESENT 1001 PR 23454
2017-11-11 14:24:00 TRACY PRESENT 1001 PR 23454
나는이 기반으로하는 보고서를 생성합니다
가 기록
그리고 이것은
select * from
(
select student_name, student_status,attendance_code,
working_date,class_id from
(
select to_char(a.date_tm,'yyyy-mm-dd hh24:mi:ss') AS working_date,
b.student_name,b.student_status,b.attendance_code,
b.teacher_update,a.transaction_id
from class_record_hist a,student_record_hist b
where a.school = 'DON BOSCO'
and a.building = 'A1'
and a.class_id = 'DB-3452'
and a.date_tm >= to_date('2017-11-10 06:00:00','yyyy-mm-dd hh24:mi:ss')
and a.date_tm <= to_date('2017-11-11 18:00:00','yyyy-mm-dd hh24:mi:ss')
and a.transaction_id = b.transaction_id
order by working_date desc,b.student_name asc
)
)
PIVOT
(
max(attendance_code) as code,
max(student_status) as status
for student_name in ('JAMES','PETER','MURPHY','MICA','STELLA','STEPHEN','TRACY');
) ;
결과처럼 내 쿼리입니다 : 위의 결과에서
WORKING_DATE CLASS_ID JAMES_STATUS JAMES_CODE PETER_STATUS PETER_CODE MURPHY_STATUS MURPHY_CODE MICA_STATUS MICA_CODE STELLA_STATUS STELLA_CODE STEPHEN_STATUS STEPHEN_CODE TRACY_STATUS TRACY_CODE
------------ -------- ------------ ---------- ------------ ---------- ------------- ----------- ----------- --------- ------------- ----------- -------------- ------------ ------------ ----------
2017-11-10 10:00:00 DB-3452 PRESENT 2344 PRESENT 2344 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 1001
2017-11-10 14:00:00 DB-3452 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 2344
2017-11-11 11:24:00 DB-3452 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 1001 PRESENT 1001
2017-11-11 14:24:00 DB-3452 PRESENT 2344 PRESENT 2344 PRESENT 2344 PRESENT 2344 PRESENT 2344 PRESENT 1001 PRESENT 1001
, 당신은 볼 수 있습니다 데이터가 잘못되었습니다.
제임스의 경우 코드 2344에서 볼 수있는 두 세션 동안 결석하지만 Status는 여전히 Present로 표시됩니다. 동일한 문제는 전체 레코드에서 발생합니다.
내가 뭘 잘못하고 있니?
제안 사항 & 입력 사항을 크게 평가 하시겠습니까?
덕분에 여전히 내 Pivot.But을 변경 한 결과가 잘못, 그것은 결석으로 표시됩니다되는 방식으로 그 하위 쿼리에 의해 주문을 필요가 없습니다 전체 레코드 집합에 대해 – jaggs
두 테이블을 모두 제공하지 않아서 질문에 대한 작업이 수행되었습니다. 하나는 MAX()를 MIN()으로 변경하는 것입니다. 하위 쿼리에서 제안 된 변경 사항을 적용한 경우에는이를 취소하여 한 번에 하나의 변경 사항 만 처리하십시오. 위에서 볼 수 있듯이 나는 결석하거나 선물로 나가지 않고, 나는 둘 다 얻는다. –