MEASURE 관련 질문 드립니다. 0 6 556

by 대마왕이닷 [Oracle 기초] MEASURE [2019.06.16 23:32:23]


주석부분 보면 --+ DECODE( TERM, '200706' ,  D['200706'] ,D['200706']*-1 ) 이렇게 실행하면 

 ORA-00984: 열을 사용할 수 없습니다
Error code: 984
SQL state: 42000

이걸 해결가능할수 없을까요?

값의 조건에 (TERM 또는 NUM)따라 + , - 줄려고 하는데 방법이 있을까요??

 

 SELECT NUM,TERM   ,SALARY
     , D,TEST
      FROM
      (
        SELECT 1 NUM, '200701' TERM, 1000000 SALARY , 2  D201901 ,'P405' TEST FROM DUAL UNION ALL
        SELECT 1 NUM, '200702' TERM, 2000000 SALARY ,3 ,'P405' FROM DUAL UNION ALL
        SELECT 1 NUM, '200703' TERM, 1500000 SALARY ,5 ,'P407' FROM DUAL UNION ALL
        SELECT 1 NUM, '200704' TERM, 1900000 SALARY ,2 ,'P405' FROM DUAL UNION ALL
        SELECT 1 NUM, '200705' TERM, 2300000 SALARY ,2 ,'P405' FROM DUAL UNION ALL
        SELECT 1 NUM, '200706' TERM, 3000000 SALARY ,2 ,'P405' FROM DUAL  UNION ALL  
        SELECT 2 NUM, '200701' TERM, 1000000 SALARY , 10 ,'P405' FROM DUAL UNION ALL
        SELECT 2 NUM, '200702' TERM, 1500000 SALARY ,11 ,'P405' FROM DUAL UNION ALL
        SELECT 2 NUM, '200703' TERM, 1500000 SALARY ,12 ,'P405' FROM DUAL UNION ALL
        SELECT 2 NUM, '200704' TERM, 1900000 SALARY ,13 ,'P405' FROM DUAL UNION ALL
        SELECT 2 NUM, '200705' TERM, 2300000 SALARY ,14 ,'P405' FROM DUAL UNION ALL
        SELECT 2 NUM, '200706' TERM, 3000000 SALARY ,15 ,'P405' FROM DUAL        
         )
 MODEL
 PARTITION BY (NUM)
 DIMENSION BY (TERM)
 MEASURES ( D201901 D,SALARY ,TEST) 
 RULES (
         D['분기'] = D['200701'] + D['200702'] + D['200703'] + D['200704'] + D['200705']  --+ DECODE( TERM, '200706' ,  D['200706'] ,D['200706']*-1 )
         ,SALARY['합계']= SUM(SALARY) [ TERM BETWEEN '200701' AND '200706' ]
         ,SALARY['평균']= ROUND(AVG(SALARY) [ TERM BETWEEN '200701' AND '200706' ]  ,2) 
         
       ) 
 ORDER BY NUM,TERM

by 마농 [2019.06.17 11:03:56]

오류 원인은 term 을 써서 그렇고, 오류 해결은 CV(term) 을 쓰면 되는데.
이건 오류만 해결한 것이고 문제 해결은 아닌 듯 하네요?
계산식이 뭔가 이상하네요. 원하는게 뭔가요?


by 대마왕이닷 [2019.06.17 17:08:33]

감사합니다.

제가 찿는부분이 맞습니다..CV(term) 가 왜 에러가 안나는지요..일단 + CASE WHEN CV(TERM)= '200706' THEN D['200706'] ELSE D['200706']*-1 END 

이런씩으로도 잘 되네요..

근데  14+2 해서 16이 나와야 하는데 왜 12가 나오는지요?

분기   12  

by 대마왕이닷 [2019.06.17 17:28:18]

일단 위 term  이 메저 값이라고 보고 분기해서 어떤건 플러스 해야하고 어떤건 마이너스 처리해야해서 그런겁니다


by 마농 [2019.06.17 17:31:17]

이미 말씀드렸듯이 계산식이 이상해요.
작성하신 계산식 대로라면 그렇게 나오는게 맞습니다.
잘못된 계산식 말고 실제로 원하는걸 설명해 보세요.


by 대마왕이닷 [2019.06.17 20:00:26]

D['분기'] = D['200701'] + D['200702'] + D['200703'] + D['200704'] +  D['200705'] -  D['200706'] 

이런결과를 원한거지만 동적쿼리  형식으로 어디가 - 붙여야 할지 몰라서

자바단에서 +,- 순서까지 배열에 담아서 던져야 겠네요..

감사합니다..


by 마농 [2019.06.18 07:32:09]

조회 조건이 어떻게 되나요?
- 를 붙이는 기준이 뭔가요?
"분기" 는 3개월을 의미하는데?
6개월 중 6월만 차감하는게 어떤 의도인지 모르겠네요?
이 식이 맞는지 의문이네요?

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입