programing

SQL Server의 DECODE() 함수

linuxpc 2023. 3. 2. 22:02
반응형

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')

위는 Oracle 쿼리입니다.SQL Server 2005에서 DECODE() 함수를 사용하려면 어떻게 해야 합니까?

'케이스'를 사용할 수 있습니다.언제...그럼..그렇지 않으면..SQL의 END 구문.

완전성을 위해 (다른 사람이 가장 명확한 답을 올리지 않았기 때문에)

Oracle:

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

MS SQL(2012+):

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

나쁜 소식:

DECODE4개 이상의 인수가 있으면 추한 결과가 됩니다.IIF캐스케이드

내가 질문을 제대로 이해했다면, 당신은 T-SQL에 해당하는 디코딩을 원한다.

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

다음과 같이 SQL Server에서 함수를 만들고DECODE와 함께dbo.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

간단한 조작:

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

기능을 사용할 때

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');

나의 경우, 성별(남성 또는 여성)과 같은 선택 문장에 2개의 값이 있는 경우, 많은 장소에서 첫 번째 예를 사용하여 다음 문구를 사용합니다.

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 

이 "테이블"에 참여,

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)

선택에 의존하는 값이 정수인 경우 CHOICE 함수를 사용할 수 있습니다.

TSQL 문서에서 기능 선택

CHOOSE ( index, val_1, val_2 [, val_n ] )  

다음 문서를 인용합니다.

색인

다음 항목 목록에서 1 기반 인덱스를 나타내는 정수 표현식입니다.

제공된 인덱스 값에 int 이외의 숫자 데이터 유형이 있는 경우 이 값은 암묵적으로 정수로 변환됩니다.인덱스 값이 값 배열의 경계를 초과하면 CHOICE는 null을 반환합니다.

val_1 ... val_n

모든 데이터 유형의 쉼표로 구분된 값 목록입니다.

한편,CASE대부분의 경우, 베이스의 솔루션은 기능합니다만, 아마 고려되지 않을 것입니다.NULL가치.오라클의DECODENULL안전, 즉

DECODE(a, b, c, d, e, f)

다음과 같은 표준 SQL 식(SQL Server 2022부터 사용 가능)으로 변환됩니다.

CASE 
  WHEN a IS NOT DISTINCT FROM b THEN c
  WHEN a IS NOT DISTINCT FROM d THEN e
  ELSE f
END

이전 버전의 SQL Server에서는 다음을 사용한 에뮬레이션EXISTS그리고.INTERSECT가능합니다.

CASE
  WHEN EXISTS (SELECT a INTERSECT SELECT b) THEN c
  WHEN EXISTS (SELECT a INTERSECT SELECT d) THEN e
  ELSE f
END

언급URL : https://stackoverflow.com/questions/1559241/decode-function-in-sql-server

반응형