programing

여러 열에 NVL 사용 - Oracle SQL

lastmoon 2023. 7. 6. 22:28
반응형

여러 열에 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

반응형