여러 열에 NVL 사용 - Oracle SQL
좋은 아침 나의 사랑하는 sql 마법사들과 마법사들,
저는 3개의 테이블에 걸쳐 3열의 데이터로 대체하고 싶습니다.현재 저는 NVL 기능을 사용하고 있지만, 그것은 두 개의 열로 제한되어 있습니다.
예는 아래를 참조하십시오.
SELECT ccc.case_id,
NVL (ccvl.descr, ccc.char)) char_val
FROM case_char ccc, char_value ccvl, lookup_value lval1
WHERE
ccvl.descr(+) = ccc.value
AND ccc.value = lval1.descr (+)
AND ccc.case_id IN ('123'))
case_char table
case_id|char |value
123 |email| work_email
124 |issue| tim_
char_value table
char | descr
work_email | complaint mail
tim_ | timeliness
lookup_value table
descr | descrlong
work_email| xxx@blah.com
기본적으로 제가 하려는 것은 case_char.value와 lookup_value.descr이 일치하는 경우 이를 표시하고 그렇지 않은 경우 case_char.value와 char_value.char가 일치하는 경우 이를 표시하는 것입니다.
char_value 테이블에서 'issue'에 대한 설명을 반환하려고 하지만 'email'에 대해서는 lookup_value 테이블(모두 같은 별칭 'char_val'에 있음)에서 descrlong을 반환하려고 합니다.
그래서 제 질문은, 어떻게 하면 그들이 같은 가명으로 나타나기를 바라는 마음을 가질 수 있을까 하는 것입니다.
더 필요한 정보가 있으면 알려주세요.
여러분 감사합니다.
NVL을 중첩할 수 있습니다.
NVL(a, NVL(b, NVL(c, d))
그러나 SQL 표준 COALESCE를 사용하면 여러 인수를 사용할 수 있으며 Oracle이 아닌 시스템에서도 작동합니다.
COALESCE(a, b, c, d)
COALESCE를 사용하는 것은 어떻습니까?
COALESCE(ccvl.descr, ccc.char)
다음과 같은 이유로 COALESCE(a, b, c, d)를 사용하는 것이 좋습니다.
중첩 NVL 로직은 단일 COALESCE(a, b, c, d)에서 달성할 수 있습니다.
COALESCE를 사용하는 것은 SQL 표준입니다.
COALESCE는 더 나은 성능을 제공합니다. NVL은 항상 먼저 사용되는 두 쿼리를 계산한 다음 첫 번째 값이 null이면 두 번째 값을 반환합니다.그러나 COALESCE 함수에서는 사용된 모든 쿼리를 실행하는 대신 null이 아닌 값이 발견될 때마다 하나씩 확인하고 응답을 반환합니다.
언급URL : https://stackoverflow.com/questions/24501915/using-nvl-for-multiple-columns-oracle-sql
'programing' 카테고리의 다른 글
경로 쿼리 매개 변수 가져오기 (0) | 2023.07.06 |
---|---|
EntityManager를 사용하여 여러 데이터 소스를 봄 부팅 (0) | 2023.07.06 |
여러 변수를 동시에 선언하는 보다 우아한 방법 (0) | 2023.07.01 |
스프링 부트를 사용하는 동안 동적 속성을 구성하는 방법은 무엇입니까? (0) | 2023.07.01 |
외부 레포 서브모듈을 사용하기 위해 깃 프로젝트를 설정하는 방법은 무엇입니까? (0) | 2023.07.01 |