복붙노트

[SQL] SQL Server의 DECODE () 함수

SQL

SQL Server의 DECODE () 함수

SELECT PC_COMP_CODE,
       'R',
       PC_RESUB_REF,
       DECODE(PC_SL_LDGR_CODE, '02', 'DR', 'CR'),
       PC_DEPT_NO DEPT,
       '', --PC_DEPT_NO,
       PC_SL_LDGR_CODE + '/' + PC_SL_ACNO,
       SUM(DECODE(PC_SL_LDGR_CODE, '02', 1, -1) * PC_AMOUNT),
       PC_CHEQUE_NO CHQNO
  FROM GLAS_PDC_CHEQUES
 WHERE PC_RESUB_REF IS NOT NULL 
   AND PC_DISCD NOT IN ('d', 'D', 'T') 
GROUP BY PC_RESUB_REF, 
         PC_COMP_CODE, 
         'JJ', 
         PC_SL_LDGR_CODE + '/' + PC_SL_ACNO, 
         PC_DEPT_NO, 
         PC_CHEQUE_NO, 
         DECODE(PC_SL_LDGR_CODE, '02', 'DR', 'CR')

위는 오라클 쿼리입니다; 어떻게 2005 SQL Server의 DECODE () 함수를 사용할 수 있습니까?

해결법

  1. ==============================

    1.당신이 사용할 수있는 'CASE를 .. 언제 .. THEN .. ELSE .. END'SQL의 구문.

    당신이 사용할 수있는 'CASE를 .. 언제 .. THEN .. ELSE .. END'SQL의 구문.

  2. ==============================

    2.내가 제대로 질문을 이해한다면, 당신은 디코드하지만, T-SQL에서 동등합니다

    내가 제대로 질문을 이해한다면, 당신은 디코드하지만, T-SQL에서 동등합니다

    Select YourFieldAliasName =
    CASE PC_SL_LDGR_CODE
        WHEN '02' THEN 'DR'
        ELSE 'CR'
    END
    
  3. ==============================

    3.그냥 완전성에 대해 (아무도 다른 가장 확실한 대답을 게시하지 않기 때문에)

    그냥 완전성에 대해 (아무도 다른 가장 확실한 대답을 게시하지 않기 때문에)

    신탁:

    DECODE(PC_SL_LDGR_CODE, '02', 'DR', 'CR')
    

    MSSQL (2012+) :

    IIF(PC_SL_LDGR_CODE='02', 'DR', 'CR')
    

    나쁜 소식 :

    4 개 이상의 인수 DECODE는 못생긴 IIF 캐스케이드 초래

  4. ==============================

    4.다음과 같이 SQL Server의 함수를 만들고 dbo.DECODE와 DECODE 교체

    다음과 같이 SQL Server의 함수를 만들고 dbo.DECODE와 DECODE 교체

    CREATE FUNCTION DECODE(@CondField as nvarchar(100),@Criteria as nvarchar(100), 
                           @True Value as nvarchar(100), @FalseValue as nvarchar(100))
    returns nvarchar(100)
    begin
           return case when @CondField = @Criteria then @TrueValue 
                       else @FalseValue end
    end
    
  5. ==============================

    5.그것은 쉽게 할 수있다 :

    그것은 쉽게 할 수있다 :

    select 
        CASE WHEN 10 > 1 THEN 'Yes'
        ELSE 'No'
    END 
    
  6. ==============================

    6.이 "문자 테이블을"가입

    이 "문자 테이블을"가입

    select 
        t.c.value('@c', 'varchar(30)') code,
        t.c.value('@v', 'varchar(30)') val
    from (select convert(xml, '<x c="CODE001" v="Value One" /><x c="CODE002" v="Value Two" />') aXmlCol) z
    cross apply aXmlCol.nodes('/x') t(c)
    
  7. ==============================

    7.

    select dbo.decode(10>1 ,'yes' ,'no')
    

    첫 번째 함수 인수의 유형과 일치하는 비트 매개 변수에 논리적 표현을 변환하는 데 필요하기 때문에 불행하게도, 즉, 당신이 주위 SQL의 CASE 절을 가지고하지 않습니다

    create function decode(@var1 as bit, @var2 as nvarchar(100), @var3 as nvarchar(100))
    returns nvarchar(100)
    begin
    return case when @var1 = 1 then @var2 else @var3 end;
    end;
    
    select dbo.decode(case when 10 > 1 then 1 else 0 end, 'Yes', 'No');
    
  8. ==============================

    8.당신의 성별 (남자 또는 여자)와 같은 선택 문이 개 값이있는 경우 내 사례 I에서 장소 첫 번째 예제를 많이 그것을 사용 후 다음 문을 사용합니다 :

    당신의 성별 (남자 또는 여자)와 같은 선택 문이 개 값이있는 경우 내 사례 I에서 장소 첫 번째 예제를 많이 그것을 사용 후 다음 문을 사용합니다 :

    SELECT CASE Gender WHEN 'Male' THEN 1 ELSE 2 END AS Gender
    

    국적과 같은 하나 개 이상의 조건이있는 경우 다음과 같은 문장으로 사용할 수 있습니다 :

    SELECT CASE Nationality 
    WHEN 'AMERICAN'   THEN 1 
    WHEN 'BRITISH'   THEN 2
    WHEN 'GERMAN'    THEN 3 
    WHEN 'EGYPT'     THEN 4 
    WHEN 'PALESTINE' THEN 5 
    ELSE 6 END AS Nationality 
    
  9. from https://stackoverflow.com/questions/1559241/decode-function-in-sql-server by cc-by-sa and MIT license