조회 조건 질문드립니다! 0 7 748

by 라면용 [Oracle 기초] [2022.04.04 16:10:33]


안녕하세요~ 현재 백신 관련해서 조회 조건 화면을 만들고 있는데 어떻게 조건문을 걸어주면 좋을지 여쭤보려고합니다!

 

조회 결과

이름       백신접종차수           백신종류                    접종일

홍길동    미접종                    아스트라제네카 1차      X

홍길동    1차                         모더나 1차                   2022.01.20

홍길동    2차                         모더나 2차                   2022.02.15

 

위 조회 조건은 현재 미접종, 1차접종, 2차접종에 대한 모든 조회조건이 나오도록 필터를 걸고 조회했을시 나오는 결과입니다.

하지만 문제는 위처럼 이미 백신 1,2차를 접종한 이력이 있는데 미접종한 다른 백신의 종류가 있으므로 미접종 백신의 이력이 같이 조회되면서 결과가 나오는 것 같습니다.

 

제가 출력하고 싶은 위예시의 정상적인 결과는 미접종 ROW를 제외한 결과가 출력되게 하는 것인데 어떻게 조회 조건을 해야할지 감을 못잡겠어서 질문드립니다!

현재 접종을 했는가에 따른 조건은 접종일이 있느냐 없느냐의 차이입니다!

by 마농 [2022.04.04 16:26:37]
SELECT *
  FROM t m
 WHERE NOT EXISTS (SELECT 1
                     FROM t s
                    WHERE s.이름 = m.이름
                      AND s.백신접종차수 != '미접종'
                      AND m.백신접종차수  = '미접종'
                   )
;
SELECT m.*
  FROM t m
  LEFT OUTER JOIN t s
    ON s.이름 = m.이름
   AND s.백신접종차수 != '미접종'
   AND m.백신접종차수  = '미접종'
 WHERE s.이름 IS NULL
;

 


by 라면용 [2022.04.04 16:53:54]

감사합니다! 시도해보겠습니다!


by 라면용 [2022.04.04 17:19:08]

마농님 혹시 추가로 질문드려도 될까요??

 

제가 위에 조회결과로 백신접종차수이 나오게 되는데 실제로 제가 적용하려는 테이블 컬럼에는 백신접종차수 컬럼이 없습니다 SELECT 절에서 CASE WHEN 값으로 백신종류중 1차면 1차 2차면 2차로 가져오게끔 따로 값을 지정해주었습니다.

 

그래서 질문드리고 싶은 것은 위에 답변 주신 것 처럼 서브쿼리 안에 WHERE 조건 중 백신접종차수 대신 접종일을 대신 넣는다면 문제는 없을지 재질문 드립니다.!


by 마농 [2022.04.04 17:23:58]

원본 테이블 정보를 보여주시는게 좋습니다.
PK 항목은 따로 있나요?
사용하신 CASE 구문도 보여주세요.

혹시 2차 인데 접종일이 없는 경우도 있는지? (예약만 걸고 아직 안맞은 경우라던가?)
이런 경우가 있다면? 결과에 어떻게 영향을 미치게 되는지?


by 라면용 [2022.04.04 17:52:07]

2차인데 접종일이 없는 경우는 없습니다!

1차든 2차든 무조건 접종했다면 접종일이 다 있습니다!


by 라면용 [2022.04.04 17:35:15]
SELECT 
A.VSL_NM
,CASE WHEN INSTR(A.LICNS_NM, 'Janssen')  > 0 THEN '접종완료'
                            WHEN INSTR(A.LICNS_NM, 'Primary')   > 0 THEN '1차접종'
                           WHEN INSTR(A.LICNS_NM, 'Secondary') > 0 THEN '접종완료'
                           ELSE  '미접종'
                      END AS VACCINED
, A.VALID_STRT_DT
, A.LICNS_NM
FROM CR_EMBRK_LICNS_TN A

백신의 내용을 주로 조회 하는게 맞지만 테이블안의 다른 컬럼들이 너무 많아서 어려울꺼같습니다 죄송합니다.. 

 

LICNS_NM 이 위 조회 결과에 적어둔 백신종류입니다!

테이블 안의  PK 말씀하시는 것일까요? 있습니다!

 

내일 답변주셔도 됩니다 감사합니다!!


by 마농 [2022.04.05 10:26:18]
WITH t AS
(
SELECT a.vsl_nm
     , CASE WHEN INSTR(a.licns_nm, 'Janssen')   > 0 THEN '접종완료'
            WHEN INSTR(a.licns_nm, 'Primary')   > 0 THEN '1차접종'
            WHEN INSTR(a.licns_nm, 'Secondary') > 0 THEN '접종완료'
            ELSE '미접종'
        END AS vaccined
     , a.valid_strt_dt
     , a.licns_nm
  FROM cr_embrk_licns_tn a
)
SELECT m.*
  FROM t m
  LEFT OUTER JOIN t s
    ON s.vsl_nm = m.vsl_nm
   AND s.vaccined != '미접종'
   AND m.vaccined  = '미접종'
 WHERE s.vsl_nm IS NULL
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입