2009-11-19 2 views
3

오라클의 decode()가 Access (또는 Jet)와 동일한 기능을 제공합니까?오라클 디코드의 액세스/제트 대응

내가 직면 한 문제는 다음과 같습니다. 기본적으로 상태 및 날짜 (상태가 2 인 모든 레코드 포함)에 따라 결과 집합을 정렬 (순서 지정)해야합니다.

오라클에서 나는 당신이 IIF으로 시도 할 수

select 
    ... 
from 
    ... 
where 
    .. 
order by 
    decode(status, 2, 0, 1), 
    date_column 
+0

VBA에서 사용자 지정 함수를 작성한 다음 SQL에서 호출 할 수 있습니다. 복잡한 선택이있는 경우이 방법이 더 좋을 수 있습니다. 그렇지 않으면 Switch 나 Iif 아래의 솔루션이 가장 좋습니다. – heferav

답변

5
이다

오라클 :

SELECT supplier_name, 
     decode(supplier_id, 10000, 'IBM', 
          10001, 'Microsoft', 
          10002, 'Hewlett Packard', 
            'Gateway') result 
    FROM suppliers; 

액세스 데이터베이스 엔진

SWITCH() 기능을 방금 supplier_id 사용에 제한되지 않도록, 전체 술어 각 시간을 제공해야한다는
SELECT supplier_name, 
     SWITCH(supplier_id = 10000, 'IBM', 
       supplier_id = 10001, 'Microsoft', 
       supplier_id = 10002, 'Hewlett Packard', 
       TRUE, 'Gateway') AS result 
    FROM suppliers; 

참고. 기본값의 경우, 사람 판독기에 명백한 술어를 사용하십시오. 실제로 1 = 1 또는 단순히 TRUE : 명확하지 않을 수

뭔가가 SWITCH() 함수의 논리 함수의 모든 표현이 오류없이 평가 될 수 있어야한다는 것을 의미 쇼트 않는다는 것입니다. 로직을 단락 시키려면 중첩 된 IIF() 함수를 사용해야합니다.

LABEL: Switch(
    [TABLE_NAME]![COL_NAME]='VAL1';'NEW_VAL1'; 
    [TABLE_NAME]![COL_NAME]='VAL2';'NEW_VAL2'; 
) 

참고 세미콜론이 아니라 쉼표 :

+0

Access-2010에서 SQL의 IIF 기능은 단락되지 않습니다. 문서화 및 경험적 테스트를 기반으로합니다. – user36800

+0

@ user36800 ...하지만 단락 회로가 없다는 증거가 있다면 어딘가에 게시 해주세요. 그리고 그것을 맹세합니다. – onedaywhen

+0

Access db 엔진의 구현에서'IIf' 함수는 실제로 단락을 일으 킵니다. VBA'IIf'는 그렇지 않습니다. @ user36800이 경험적으로 그 지점을 확인하기를 원한다면 쉽습니다. Access 쿼리에서'SELECT IIf (True, 2,1/0)'은 2를 반환합니다. VBA에서 같은 IIf 식은 런타임 오류 11을 유발합니다 : * "Division by zero"*. – HansUp

1

과 같이 갈 것입니다. this stackoverflow 질문을 참조하십시오.

0

당신은 SWITCH 기능을 사용할 수 있습니다.

위의 예제는 MS Access 2010의 쿼리에서 작동합니다.