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 894 게시물 읽기
No. 894
쿼리좀 봐주세요^^ 에러가 나는데요
작성자
이성훈(lsh0039)
작성일
2005-12-14 14:54ⓒ
2005-12-14 14:55ⓜ
조회수
7,382

데이터는 555번을 보시면됩니다.
대수는 CTCODE별 NO의 GROUP BY 한값입니다.

SELECT
CASE SEQ WHEN 1 THEN DENSE_RANK() OVER(ORDER BY CTCODE) END NO,
case SEQ when 1 then CTCODE end CTCODE,
case SEQ when 1 then '기간' else '일반' end GUBUN,
case SEQ when 1 then NUM1 when 2 then NUM2 end NUM,
case SEQ when 1 then CHAMT1 when 2 then CHAMT2 end CHAMT
(CASE SEQ WHEN 1 THEN CHAMT1
WHEN 2 THEN CHAMT2
END) * 100 / SUM(CASE SEQ
WHEN 1 THEN CHAMT1
WHEN 2 THEN CHAMT2
END)
OVER(PARTITION BY NO) PERCENT
FROM (
SELECT CTCODE,
COUNT(DISTINCT (CASE SUBSTR(VDCODE,3,3) WHEN '999' THEN NULL ELSE SEQ END)) AS NUM1,
VALUE(SUM(CASE SUBSTR(VDCODE,3,3) WHEN '999' THEN 0 ELSE CHAMT END),0) as CHAMT1

COUNT(DISTINCT (CASE SUBSTR(VDCODE,3,3) WHEN '999' THEN NO)) NUM2,
VALUE(SUM(CASE SUBSTR(VDCODE,3,3) WHEN '999' THEN CHAMT END),0) as CHAMT2
FROM SALELIB.SALETRS
WHERE HISA='11' AND UPSO ='12' AND DATE = '20051101'
GROUP BY CTCODE) A,
(SELECT 1 SEQ FROM DUAL UNION ALL SELECT 2 NO FROM DUAL) B

에러가 납니다.
Error: SQL0104 - Token OVER was not valid. Valid tokens: END. (State:37000, Native Code: FFFFFF98)
문법상에 잘못된점 있으면 지적좀 해주세요...

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

마농님이 하신거 db2에 맞게 바꿨어요

with SALETRS(DATE,NO,SUBNO,CHAMT,JOBAMT,CTCODE,VDCODE) as (values
('20051101','2031','0',1000 ,'0','a','12665'),
('20051101','2031','1',4000 ,'0','a','12665'),
('20051101','2032','0',2000 ,'0','a','12665'),
('20051101','2032','1',3000 ,'0','a','12665'),
('20051101','2034','0',10000,'0','b','12602'),
('20051101','2035','0',20000,'0','b','12602'),
('20051101','2036','0',4000 ,'0','b','12602'),
('20051101','2050','0',6000 ,'0','b','12503'),
('20051101','2014','0',4000 ,'0','c','12229'),
('20051101','2016','0',6000 ,'0','c','12229'),
('20051101','2017','0',15000,'0','c','12123'),
('20051101','2020','0',25000,'0','c','13113'),
('20051101','2021','0',4000 ,'0','c','12999'),
('20051101','2022','0',16000,'0','c','12999'))

SELECT CASE no WHEN 1 THEN DENSE_RANK() OVER(ORDER BY ctcode) END no,
       CASE no WHEN 1 THEN ctcode END  ctcode,
       CASE no WHEN 1 THEN '기간' ELSE '일반' END gubun,
       CASE no WHEN 1 THEN num1 WHEN 2 THEN num2 END num,
       CASE no WHEN 1 THEN sa_chamt1 WHEN 2 THEN sa_chamt2 END sa_chamt,
       CASE no WHEN 1 THEN sa_chamt1 WHEN 2 THEN sa_chamt2 END * 100 /
       SUM(CASE no WHEN 1 THEN sa_chamt1 WHEN 2 THEN sa_chamt2 END) OVER(PARTITION BY no) percent
FROM
(
SELECT ctcode,
       COUNT(DISTINCT CASE SUBSTR(vdcode,3,3) WHEN '999' THEN NULL ELSE no END) num1,
       VALUE(SUM(CASE SUBSTR(vdcode,3,3) WHEN '999' THEN 0 ELSE chamt END),0) sa_chamt1,
       COUNT(DISTINCT CASE SUBSTR(vdcode,3,3) WHEN '999' THEN no ELSE NULL END) num2,
       VALUE(SUM(CASE SUBSTR(vdcode,3,3) WHEN '999' THEN chamt ELSE 0 END),0) sa_chamt2
  FROM SALETRS
 WHERE date = '20051101'
GROUP BY ctcode ) A, (VALUES(1),(2)) as B(NO);

바꾸기님이 2005-12-14 16:06에 작성한 댓글입니다. Edit

바꾸기님 정말 감사합니다.

 

근데 해보니깐

Error: SQL0104 - Token OVER was not valid. Valid tokens: END. (State:37000, Native Code: FFFFFF98)
에러가 나는데요.

혹시 db2 버전이 4.4버전이라서 OVER함수가 없어서 나는 거 아닌가 싶네요...

맞나요?

 

이성훈(lsh0039)님이 2005-12-14 18:33에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
897문자변환 Query 질문입니다.. [2]
김석
2005-12-21
8166
896Select 문에서 문자열 연결
김은희
2005-12-16
7221
895버전문의좀 할게요... 아시는분 답변부탁드립니다.
이성훈
2005-12-14
5259
894쿼리좀 봐주세요^^ 에러가 나는데요 [2]
이성훈
2005-12-14
7382
893테이블 생성시 에러 입니다.. 봐 주세요.. [4]
김성준
2005-12-14
6804
892현재 쿼리를 오라클의 DECODE를 DB2의 CASE로 바꾸는것좀 봐주세요 [2]
이성훈
2005-12-14
8665
891오라클의 DECODE와 같은 함수가 DB2의 CASE인가요? [2]
이성훈
2005-12-14
9361
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다