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
운영게시판
최근게시물
Oracle Q&A 41432 게시물 읽기
No. 41432
오라클 쿼리 질문이요....
작성자
백현선(clarityseon)
작성일
2017-06-21 10:17
조회수
6,831
 
업체명에 따른 주수별 합계를 구하는 쿼리입니다..
아래 쿼리문을 실행하면..
00936 누락된 표현식이라고 뜨는데 뭐가 잘 못 되었는지 잘 모르겠네요...ㅠㅠ
sum 함수가 잘 못 되어 잇는거 같긴 한데 확실히 어떻게 잘못 쓴건지를 모르겟습니다..
도와주세요....!!
 
 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT DECODE(CMP_NAME,NULL,'합계',CMP_NAME)AS 업체명,
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='1')AS "1주",
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='2')AS "2주",
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='3')AS "3주",,
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='4')AS "4주",,
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='5')AS "5주",,
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='6')AS "6주",,
--가로합계
(SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='1')+
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='2')+
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='3')+
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='4')+
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='5')+
SUM(SELECT TO_CHAR(PUT_START_DAY,'W') FROM INSA_EMP_PJT WHERE TO_CHAR(PUT_START_DAY,'W')='6'))AS "TOT"
 
FROM
INSA_COMPANY T1,
INSA T2,
INSA_EMP_PJT T3
WHERE 1=1
AND ((T3.PUT_START_DAY >=TO_DATE(:IN_YYYY||'0101','YYYYMMDD')AND T3.PUT_START_DAY <TO_DATE(:IN_YYYY||'1231','YYYYMMDD')+1)
 OR
 (T3.PUT_END_DAY >=TO_DATE(:IN_YYYY||'0101','YYYYMMDD')AND T3.PUT_END_DAY <TO_DATE(:IN_YYYY||'1231','YYYYMMDD')+1))
 
AND TW.SABUN=T3.SABUN
AND T1.CMP_REG_NO=T2.CMP_REG_NO
GROUP BY ROLLUP(T1.CMP_NAME)
ORDER BY T1.CMP_NAME;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
이 글에 대한 댓글이 총 7건 있습니다.

1. 구문 오류
  - ,,  : 컴마가 두개 연속 사용된 부분
  - TW. : 정의되지 않은 알리아스 사용
2. 로직 오류1
  - 기간 검색 조건이 틀린 듯 하구요.
  - between or 검색이 아닌. 시작 종료를 교차 비교 하는 방식으로
  - AND t3.put_start_day <  TO_DATE(:in_yyyy || '1231', 'yyyymmdd') + 1
  - AND t3.put_end_day   >= TO_DATE(:in_yyyy || '0101', 'yyyymmdd')
3. 로직 오류2
  - 주차 기준을 시작일자로만 판단하는게 맞는지요?
  - 여러주에 걸쳐있는 경우라면?
  - SUM 을 하는 대상도 이상하구요. 값이 아닌 주차를 SUM 하네요?
  - 서브쿼리로 insa_emp_pjt 를 또 사용하는 것도 이상합니다.
  - W 로 표현되는 주차는 월간 주차로 (1-5) 범위입니다.
  - 집계 기준을 명확하게 정의하셔야 합니다.

마농(manon94)님이 2017-06-21 11:16에 작성한 댓글입니다.
이 댓글은 2017-06-21 11:22에 마지막으로 수정되었습니다.

 댓글 감사합니다...

제가 댓글을 읽어보다가 이해를 못 하겠어서 다시 여쭙습니다..

 

로직오류2 에서 여러주에 걸쳐 있는 경우란 어떤 경우를 의미하시는 건지요?

그리고... s um을 구하는게 시작 주차수가 1인 컬럼의 합계를 구하는거인데..

그게 잘못 되어진건가요?

w주차 표현은 맞는데... 

 

 

제가 아직은 많이 모자르네요 ㅠㅠ 

백현선(clarityseon)님이 2017-06-21 13:28에 작성한 댓글입니다.

시작일과 종료일자가 여러주에 걸친 경우를 말한 것입니다.
1주차에 시작해서 3주차까지 걸친 경우
1주차, 2주차 3주차 3개 주차에 모두 통계가 잡혀야 하는것 아닌가 싶어서요.
주차 기준을 시작일자로만 판단하는게 맞는지? 의문이 들었던 거구요.
맞다면 상관 없습니다.


SUM 의 대상이 w 로 나온 값을 합산하는것이 이상하죠.
1주차의 합산은 1+1+1 이 될 것이고
5주차의 합산은 5+5+5 이 되겠지요.


w 주차는 월에대한 주차로 최대 5주차까지만 존재합니다.
w 주차는 요일과 관계없이 1일부터 7일 단위로 바뀝니다.
이 주차가 정말 맞는지 궁금했구요.


서브쿼리 사용 안해야 맞을 듯 한데
서브쿼리 사용한 것도 이상하구요.


집계 기준을 명확하게 정의하셔야 합니다.

마농(manon94)님이 2017-06-21 13:37에 작성한 댓글입니다.

주차 에 대해서 제가 잘 모르다보니.. .헷갈리네요. 

요일과 관계 있게 주수를 계산 해야하는거거든요.

그래서 총 1달에  최대 6주까지 계산이 되어야 하는거 구요...

 

혹시 주차 계산 제가 아는 거 말고 다른 계산 법 아시는지요??

 

sum 부분은  저도 이상하다고 생각은 되는데 어떤식으로 바꿔야 할지를 모르겠네요

;;;

 

 

 

 

백현선(clarityseon)님이 2017-06-21 14:16에 작성한 댓글입니다.

3번째 똑같은 답변 반복합니다.
집계 기준을 명확하게 정의하셔야 합니다.
어떤 기준으로 무엇을 어떻게 집계할 것인지?

마농(manon94)님이 2017-06-21 14:24에 작성한 댓글입니다.
이 댓글은 2017-06-21 14:25에 마지막으로 수정되었습니다.

안녕하세요.. 마농님 께 하나 더 질문 하고자 하는게 있습니다.

쿼리의 오류는 다 수정을 했는데

말씀하신대로 

주차의 기준을 다시 잡으려고 합니다. 예를 들어 1일이 일요일로 시작되는 경우에는

마지막날이 그 달 6주차로 시작 되는 경우가 있는데..

 

그런 경우에는 요일별로 정하는게 맞는거 아닌가요?

근데 쿼리를 검색해보면.. 보통 6주차 까지 구하는 계산법은 없는거 같더라구요.

 

 

백현선(clarityseon)님이 2017-06-22 10:01에 작성한 댓글입니다.

집계 기준을 명확하게 정의하신 이후에 쿼리작성 고민하시면 됩니다.

집계 기준이 명확하지 않은 상태로 쿼리부터 고민하실 필요 없습니다.

어떤 기준으로 어떤 방식으로 집계할 것인지부터 정하세요.

 

1. 주차의 기준

- 월별 1주차 ~ 6주차 로 한다.

- 주의 시작일이 일요일인지? 월요일인지?

- 일월화수목금토 / 월화수목금토일

2. 집계 항목은?

- 특정 컬럼값의 합계?

- 레코드 건수?

- 주별 일 수

- 사원의 수?

3. 집계 예시

- 일월화수목금토 기준

- 시작일 ~ 종료일이 2017-06-01 ~ 2017-06-15 일 때

- 이 자료는 1주차 ~ 3주차 까지 걸쳐 있음

- 이 자료를 어느 주차에 어떻게 집계를 할지?

- 시작일자만 가지고 1주차에 집계할지?

- 시작~종료 기간으로 1,2,3주차에 각각 집계할지?

- 예를 들어 주별 일수로 집계한다면?

- 1주차 : 6/1~6/3 = 3일

- 2주차 : 6/4~6/10 = 7일

- 3주차 : 6/11~6/15 = 5일

4. 집계 기간은 어떻게 되는지?

- 월단위인지? 년단위인지? 기타 기간인지?

- 년단위의 경우 1월1주차와 2월1주차가 그냥 1주차 하나로 통합되면 되는 건지?

마농(manon94)님이 2017-06-22 10:12에 작성한 댓글입니다.
이 댓글은 2017-06-22 10:28에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
41435Insert 작업 속도개선 요청 [2]
마카
2017-06-29
6147
41434마이너스 필드 타입 [1]
아폴론
2017-06-28
6086
41433쿼리문 좋은것좀 가르쳐주세요. [3]
라라라
2017-06-27
6411
41432오라클 쿼리 질문이요.... [7]
백현선
2017-06-21
6831
41431oracle client설치 시 질문
oracle
2017-06-20
6201
41430cpan으로 DBD::Oracle 설치 오류
oracle
2017-06-20
5895
41427안녕하세요. 오라클 레퍼런스 북에 있는 db 활용해 공부하려는데요.
전설
2017-06-20
5805
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다