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')
나쁜 소식:
DECODE
4개 이상의 인수가 있으면 추한 결과가 됩니다.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 함수를 사용할 수 있습니다.
CHOOSE ( index, val_1, val_2 [, val_n ] )
다음 문서를 인용합니다.
색인
다음 항목 목록에서 1 기반 인덱스를 나타내는 정수 표현식입니다.
제공된 인덱스 값에 int 이외의 숫자 데이터 유형이 있는 경우 이 값은 암묵적으로 정수로 변환됩니다.인덱스 값이 값 배열의 경계를 초과하면 CHOICE는 null을 반환합니다.
val_1 ... val_n
모든 데이터 유형의 쉼표로 구분된 값 목록입니다.
한편,CASE
대부분의 경우, 베이스의 솔루션은 기능합니다만, 아마 고려되지 않을 것입니다.NULL
가치.오라클의DECODE
이NULL
안전, 즉
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
'programing' 카테고리의 다른 글
여러 스프링 부트 애플리케이션을 한 번에 테스트하는 방법 (0) | 2023.03.02 |
---|---|
WooCommerce의 기존 주문 내 배송 방법/요금 계산 (0) | 2023.03.02 |
JSON 데이터를 암호화할 수 있습니까? (0) | 2023.03.02 |
"[객체]가 함수가 아니다"를 초래하는 각도 모의 'module' (0) | 2023.03.02 |
postgresql에서의 JSON 해석 방법 (0) | 2023.03.02 |