SELECT
A.USRID,
SUM(D.LEAN_TCNT) TCNT,
C.SJ_CD,
C.CRS_YEAR
FROM
TLMS_STUDENT A
INNER JOIN TLMS_CRSSEQ B
ON A.CRSSEQ_ID = B.CRSSEQ_ID
INNER JOIN TLMS_CRS C
ON C.CRSCD = B.CRSCD
INNER JOIN (
SELECT CRS_NM, TOT_TCNT, ROUND(SUM(CNT/S_LSSN_CNT)*2) AS LEAN_TCNT, CRSSEQ_ID FROM (
SELECT CRS_NM, TOT_TCNT, CRSSEQ_ID, S_LSSN_CNT,
CASE WHEN S_LSSN_CNT = S_LSSN_CMPL_CNT THEN 1
ELSE 0
END CNT
FROM (
SELECT A.CRS_NM
, A.CRSSEQ_ID
, (SELECT COUNT(*) * 2 FROM TLMS_LSSN WHERE DEPTH = 2 AND CRSCD = A.CRSCD) AS TOT_TCNT
, COUNT(A.LSSN_CD) OVER(PARTITION BY A.L_LSSN_CD) AS S_LSSN_CNT
, SUM(DECODE(LR.CMPLTN_YN,'Y',1,0)) OVER(PARTITION BY A.L_LSSN_CD) AS S_LSSN_CMPL_CNT
FROM (
SELECT S.STUDENT_ID
, S.CRSSEQ_ID, CS.CRSCD, C.CRS_NM
, S.USRID
, L.LSSN_CD
, L2.LSSN_CD AS L_LSSN_CD
, L.CONTSID, L.ITEMID, L.UPITEMID
, L2.LSSN_NM AS L_LSSN_NM
, L.LSSN_NM AS S_LSSN_NM
FROM TLMS_STUDENT S
, TLMS_CRSSEQ CS
, TLMS_CRS C
, TLMS_LSSN L -- 소주제정보
, TLMS_LSSN L2 -- 회차정보
WHERE S.CRSSEQ_ID = CS.CRSSEQ_ID
AND CS.CRSCD = C.CRSCD
AND CS.CRSCD = L.CRSCD
AND L.CRSCD = L2.CRSCD
AND L.CONTSID = L2.CONTSID
AND L.UPITEMID = L2.ITEMID
AND S.USRID = 사용자 아이디 <------------------------- 해당 부분 대신 전체 유저 테이블과 조인을 걸어서 마지막에 사용자 아이디를 걸면 결과가 다르게 나옴
AND S.STUDENT_STCD = '03'
AND L.DEPTH = 3
AND L.SUB_THEMA_TY = 'V'
) A
, TLMS_LSSN_RSLT LR
, TCMS_ITEM I
WHERE A.STUDENT_ID = LR.STUDENT_ID(+)
AND A.CRSCD = LR.CRSCD(+)
AND A.LSSN_CD = LR.LSSN_CD(+)
AND A.CONTSID = I.CONTSID
AND A.ITEMID = I.ITEMID
AND I.SUB_THEMA_TY IS NOT NULL
)
)
GROUP BY CRS_NM, TOT_TCNT, CRSSEQ_ID
) D
ON B.CRSSEQ_ID = D.CRSSEQ_ID
WHERE A.USRID = 사용자 아이디
GROUP BY A.USRID, C.SJ_CD, C.CRS_YEAR
ORDER BY A.USRID, SJ_CD ASC
여러개 조인을 해서 결과를 뽑아내는 쿼리인데
가장 안쪽(?) 쿼리에서 특정 사용자를 조건을 걸면 조회가 잘 나오는데
우선 전체로 뽑아서 가장 마지막에 걸거나
그냥 조건 안 걸로 전체 조회 후 엑셀로 받아서 그 사용자만 검색해보면 값이 다르게 출력이 되는데
이건 구조 자체가 문제일까요..?
정말 사소한 팁이라도 부탁드려요ㅜ
아래 이미지는 정상출력 값이고
틀리게 나오는 값은 어떤 학습자를 조회해도 TCNT가 0으로 나오고 있습니다.