조건이 여러개일경우 case문 질문드립니다.. 0 6 276

by 퇴근하고싶다 [Oracle 기초] [2019.04.14 15:24:28]


안녕하세요.

테이블 1

이름 구분코드 맞은개수(j) 틀린개수(s) 점수 최종점수 최종플래그
이순신 A 5 1 80   Y
이순신 B 2 1 50   Y
홍길동 C 4 1 70   Y
홍길동 C 3 2 60   Y
김유신 B 5 1 80   Y
김유신 B 3 2 60   Y
안중근 B 2 1 50   Y
안중근 A 2 2 65   Y
쯔위 A 3 2 60   N

이러한 테이블이 있다면...

최종점수에 출력되는 조건은..

1. 구분코드가 A 또는 C 일때 최종점수 = round(least(1/(틀린개수+0.5),0.5)*점수,1)

2. 구분코드가 B 일때 최종점수 = round(((1-(least(1/(틀린개수+0.5),0.5))*틀린개수)/(맞은개수-틀린개수))*점수,1)

3. 구분코드가 B이고 맞은개수-틀린개수=1 일때 최종점수 = round((((1-틀린개수*least(1/(틀린개수+0.5),0.5))/맞은개수-틀린개수)))*점수,1)

4. ((구분코드가 A or C) && (맞은개수-틀린개수=1) && (틀린개수 =1)) 일때 최종점수 =  round((2/3)*점수,1)

5. ((구분코드 =B) && (맞은개수-틀린개수=1) &&(틀린개수=1)) 일때 최종점수 = round((1/3)*점수,1)

6. 맞은개수-틀린개수=0 일때 최종점수 = round((1/틀린개수)*점수,1)

7. 최종플래그=N 무조건 최종점수=0

이런조건에 따라 최종점수 칼럼한개에 출력될수있게끔 하려면 어떻게 해야할까요ㅠㅠ조건이 여러개일때 위에 조건만 만족해버리면 밑에조건은 성립이 안되더군요 ㅠㅠ

감사합니다...

by 마농 [2019.04.15 08:31:53]

조건이 포함관계에 있다면?
작은 범위의 조건을 앞쪽에 두시면 됩니다.


by 퇴근하고싶다 [2019.04.15 08:49:59]

작은범위조건(조건1번)을 앞에 두면 조건4번이 성립이 안되고 1번조건문이 성립이 됩니다 ㅠㅠ


by 마농 [2019.04.15 08:56:05]

1번이 4번을 포함하므로 작은 범위는 4번입니다.
4 > 1 순서로
5 > 3 > 2 순서로 배치하셔야 합니다.
1 과 2 는 서로 배타적이므로 어느 것이 앞에 오든 상관 없습니다.
다만 6 의 위치가 애매한데요?
6 은 1 과 2 와 겹치는 부분이 존재할 수 있습니다.포함관계는 아니고 일부만 겹칠 수 있습니다.
6 의 위치를 1,2 보다 앞에 둘지? 뒤에 둘지? 우선순위를 정하셔야 합니다.
예1) 6을 뒤에 두는 경우
 - 4 > 1 > 5 > 3 > 2 > 6 > 7
 - 5 > 3 > 2 > 4 > 1 > 6 > 7
예2) 6을 앞에 두는 경우
 - 6 > 4 > 1 > 5 > 3 > 2 > 7
 - 6 > 5 > 3 > 2 > 4 > 1 > 7


by 마농 [2019.04.15 09:16:23]

다시 생각해 보니 6번이 뒤에 오면 6번을 만족하는게 나올 수 없겠네요.
6번이 앞에 와야 할 것 같네요.
 - 6 > 4 > 1 > 5 > 3 > 2 > 7


by 마농 [2019.04.15 09:31:26]

음. 7번 조건이 ELSE 조건인 줄 알았는데...최종플래그=N 이 결과인 줄 알았는데.
혹시, 최종플래그=N 이 조건인 건가요?
이러면 7번이 맨 앞에 와야 하는게 아닐런지?
- 7 > 6 > 4 > 1 > 5 > 3 > 2


by 색즉시공 [2019.04.21 10:49:19]
-- 여러조건 만족시 가장 큰점수 가져오기
SELECT  T.*
       ,CASE WHEN 조건7 THEN 0
             ELSE GREATEST (
                    CASE WHEN 조건1 THEN 조건1점수 ELSE 0 END
                   ,CASE WHEN 조건2 THEN 조건2점수 ELSE 0 END
                   ,CASE WHEN 조건3 THEN 조건3점수 ELSE 0 END
                   ,CASE WHEN 조건4 THEN 조건4점수 ELSE 0 END
                   ,CASE WHEN 조건5 THEN 조건5점수 ELSE 0 END
                   ,CASE WHEN 조건6 THEN 조건6점수 ELSE 0 END
                    )
         END LAST_SCOR
  FROM T

 

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