database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 892 게시물 읽기
No. 892
현재 쿼리를 오라클의 DECODE를 DB2의 CASE로 바꾸는것좀 봐주세요
작성자
이성훈(lsh0039)
작성일
2005-12-14 11:52ⓒ
2005-12-14 13:18ⓜ
조회수
8,563

SELECT DECODE(SA_SEQ,1,DENSE_RANK() OVER(ORDER BY SA_CTCODE)) NO,
DECODE(SA_SEQ,1,SA_CTCODE) SA_CTCODE,
DECODE(SA_SEQ,1,'기간','일반') SA_GUBUN,
DECODE(SA_SEQ,1,SA_NUM1,2,SA_NUM2) SA_NUM,
DECODE(SA_SEQ,1,SA_CHAMT1,2,SA_CHAMT2) SA_CHAMT,
DECODE(SA_SEQ,1,SA_CHAMT1,2,SA_CHAMT2) * 100 / SUM(DECODE(SA_SEQ,1,SA_CHAMT1,2,SA_CHAMT2)) OVER(PARTITION BY NO) SA_PERCENT

from table

바꾼것>

SELECT (CASE SA_SEQ WHEN 1 THEN DENSE_RANK() OVER(ORDER BY SA_CTCODE)) AS NO,
(case SA_SEQ WHEN 1 THEN SA_CTCODE) AS SA_CTCODE,
(case SA_SEQ WHEN 1 THEN '기간','일반') AS SA_GUBUN,
(CASE SA_SEQ WHEN 1 THEN SA_NUM1
WHEN 2 THEN SA_NUM2
END) AS SA_NUM,
(CASE SA_SEQ WHEN 1 THEN SA_CHAMT1
WHEN 2 THEN SA_CHAMT2
END) AS SA_CHAMT,
(CASE SA_SEQ WHEN 1 THEN SA_CHAMT1
WHEN 2 THEN SA_CHAMT2
END) * 100 / SUM(CASE SA_SEQ WHEN 1 THEN SA_CHAMT1
WHEN 2 THEN SA_CHAMT2
END) OVER(PARTITION BY NO) SA_PERCENT

아래 것을 바꾸면 어떻게 되나요?

FROM 절 다음인데요...

 

FROM (

SELECT SA_CTCODE,
COUNT(DISTINCT DECODE(SUBSTR(SA_VDCODE,3,3),'999',NULL,SA_SEQ)) SA_NUM1,
NVL(SUM(DECODE(SUBSTR(SA_VDCODE,3,3),'999',TO_NUMBER(NULL),SA_CHAMT)),0) SA_CHAMT1,
COUNT(DISTINCT DECODE(SUBSTR(SA_VDCODE,3,3),'999',NO)) SA_NUM2,
NVL(SUM(DECODE(SUBSTR(SA_VDCODE,3,3),'999',SA_CHAMT)),0) SA_CHAMT2
FROM SALELIB.SALETRS

 

마지막으로 NVL은 db2에서도 사용되는 함수인가요?

없다면 대치되는 함수는 무엇이 있을까요?

답변 부탁합니다.

 

이 글에 대한 댓글이 총 2건 있습니다.

decode는 case문으로 바꿔요

 

case SA_SEQ when 1 then SA_CTCODE end SA_CTCODE,
case SA_SEQ when 1 then '기간' else '일반' end SA_GUBUN,
case SA_SEQ when 1 then SA_NUM1 when 2 then SA_NUM2 end SA_NUM,
case SA_SEQ when 1 then SA_CHAMT1 when 2 then SA_CHAMT2 end SA_CHAMT

case님이 2005-12-14 13:23에 작성한 댓글입니다. Edit

nvl은 value로

 

NVL(SUM(DECODE(SUBSTR(SA_VDCODE,3,3),'999',TO_NUMBER(NULL),SA_CHAMT)),0) SA_CHAMT1

->

VALUE(SUM(CASE SUBSTR(SA_VDCODE,3,3) WHEN '999' THEN 0 ELSE SA_CHAMT END),0) as SA_CHAMT1

 

value님이 2005-12-14 13:36에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
895버전문의좀 할게요... 아시는분 답변부탁드립니다.
이성훈
2005-12-14
5166
894쿼리좀 봐주세요^^ 에러가 나는데요 [2]
이성훈
2005-12-14
7264
893테이블 생성시 에러 입니다.. 봐 주세요.. [4]
김성준
2005-12-14
6702
892현재 쿼리를 오라클의 DECODE를 DB2의 CASE로 바꾸는것좀 봐주세요 [2]
이성훈
2005-12-14
8563
891오라클의 DECODE와 같은 함수가 DB2의 CASE인가요? [2]
이성훈
2005-12-14
9256
890복잡한 쿼리인데 꼭좀 봐주세요 [1]
이성훈
2005-12-13
5705
888날짜필드가 Long Type인 경우... 부탁 드립니다. [4]
쿼리초보
2005-12-12
5734
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다