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
운영게시판
최근게시물
MS-SQL Q&A 1915 게시물 읽기
No. 1915
쿼리부분이 문제가 있는듯 합니다.
작성자
이태헌
작성일
2005-04-25 16:04
조회수
3,046

안녕하세요. ms-sql 초보가 여러고수님께 조언을 구합니다.

다름아니고 맨 아래에 있는 소스(쿼리부분)를 보시면

급여프로그램 중의 수당공제프로그램의 한부분(쿼리)입니다.

 

파워빌더로 작업을 하고 있는데요..

 

5개의 데이터가 잘못이 되어 있어서 수정을 요해야하는 상황입니다.

 

우선.

1. al_cd_1(직책수당)의 합이 \1,900,000이어야 하는데 \1,400,000 나왔고

2. al_cd_3(장비지원수당)의 합이 \4,350,000이어야 하는데 \4,000,000이 나왔고

3. al_cd_6(급식비지원)의 합이 \4,160,000이어야 하는데 \2,720,000원 나왔고

4. GITA_JIGEUB1(기타지급1)의 합이 \300,000이어야 하는데 \250,000 나왔습니다.

마지막으로 5번째는 퇴직자가 나오는데 퇴직한 날짜를 기준으로 해서 나오지 않아야 하고,

또 퇴직한 사람이 다시 입사한 경우는 제외시켜야합니다.

이것 때문에 며칠동안 끙끙댔습니다.

많은 조언을 부탁드립니다.

 

 

SELECT A.BUSEO_NAME , B.SAWON_NO , B.EMPL_NAME1 ,
A.DIV_COD,
C.al_cd_1 , C.al_cd_2 , C.al_cd_3,
C.al_cd_4 , C.al_cd_5 , C.al_cd_6,
C.al_cd_7 ,
0 GITA_JIGEUB1,0 GITA_JIGEUB2,0 GITA_JIGEUB3,
0 GITA_GJE1 ,0 GITA_GJE2 ,0 GITA_GJE3,
A.BUSEO_COD
FROM TBCMI01 B , TBCMI43 A,
(SELECT Z.EMP_NO EMP_NO, SUM(al_cd_1) al_cd_1, SUM(al_cd_2) al_cd_2, SUM(al_cd_3) al_cd_3, SUM(al_cd_4) al_cd_4, SUM(al_cd_5) al_cd_5 , SUM(al_cd_6) al_cd_6 , SUM(al_cd_7) al_cd_7
FROM (SELECT EMP_NO ,
al_cd_1 =
CASE
WHEN ALLOWANCE_CODE LIKE 'DU%' THEN AMOUNT /* 직책수당 */
END,
al_cd_2 =
CASE
WHEN ALLOWANCE_CODE LIKE 'OV%' THEN AMOUNT /* 야근수당 */
END,
al_cd_3 =
CASE
WHEN ALLOWANCE_CODE LIKE 'SH%' THEN AMOUNT /* SHIFT수당 */
END,
al_cd_4 =
CASE
WHEN ALLOWANCE_CODE LIKE 'PC%' THEN AMOUNT /* 장비지원수당 */
END,
al_cd_5 =
CASE
WHEN ALLOWANCE_CODE LIKE 'CA%' THEN AMOUNT /* 차량보조비 */
END,
al_cd_6 =
CASE
WHEN ALLOWANCE_CODE LIKE 'FO%' THEN AMOUNT /* 급식보조비 */
END ,
al_cd_7 =
CASE
WHEN ALLOWANCE_CODE LIKE 'SP%' THEN AMOUNT /* 특근수당 */
END
FROM PAY_ALLOWANCE_SCHEDUAL
WHERE USE_YN = 'Y'
and '200503' between SUBSTRING(START_DATE,1,6) and SUBSTRING(END_DATE,1,6)
) Z
GROUP BY Z.EMP_NO) C
WHERE B.SAWON_NO =+ C.EMP_NO
AND (B.TJIK_IL IS NULL OR B.TJIK_IL = '' OR B.TJIK_IL < '200503')
AND A.BUSEO_COD = B.BUSEO_COD
and B.SAWON_NO like '%'
and B.BUSEO_COD like '%'
and A.DIV_COD like '%'
AND B.SAWON_GUBUN in ('1','2','3','4')
UNION ALL
SELECT A.BUSEO_NAME , B.SAWON_NO , B.EMPL_NAME1 ,
A.DIV_COD,
0 al_cd_1 ,0 al_cd_2 ,0 al_cd_3,
0 al_cd_4 ,0 al_cd_5 ,0 al_cd_6,
0 al_cd_7,
D.GITA_JIGEUB1, D.GITA_JIGEUB2, D.GITA_JIGEUB3,
D.GITA_GJE1 , D.GITA_GJE2 , D.GITA_GJE3,
A.BUSEO_COD
FROM TBCMI01 B , TBCMI43 A,
(SELECT Y.SAWON_NO ,
Y.GITA_JIGEUB1, Y.GITA_JIGEUB2, Y.GITA_JIGEUB3,
Y.GITA_GJE1 , Y.GITA_GJE2 , Y.GITA_GJE3
FROM TBCMK10 Y
WHERE Y.YEAR_MONTH = '200503') D
WHERE B.SAWON_NO =+ D.SAWON_NO
AND (B.TJIK_IL IS NULL OR B.TJIK_IL = '' OR B.TJIK_IL < '200503')
AND A.BUSEO_COD = B.BUSEO_COD
and B.SAWON_NO like '%'
and B.BUSEO_COD like '%'
and A.DIV_COD like '%'
AND B.SAWON_GUBUN in ('1','2','3','4')
UNION ALL
SELECT A.BUSEO_NAME , B.SAWON_NO , B.EMPL_NAME1 ,
A.DIV_COD,
0 al_cd_1 ,0 al_cd_2 ,0 al_cd_3,
0 al_cd_4 ,0 al_cd_5 ,0 al_cd_6,
0 al_cd_7,
0 GITA_JIGEUB1, 0 GITA_JIGEUB2, 0 GITA_JIGEUB3,
0 GITA_GJE1 , 0 GITA_GJE2 , 0 GITA_GJE3,
A.BUSEO_COD
FROM TBCMI01 B , TBCMI43 A
WHERE (B.TJIK_IL IS NULL OR B.TJIK_IL = '' OR B.TJIK_IL < '200503')
AND A.BUSEO_COD = B.BUSEO_COD
and B.SAWON_NO like '%'
and B.BUSEO_COD like '%'
and A.DIV_COD like '%'
AND B.SAWON_GUBUN in ('1','2','3','4')
ORDER BY A.DIV_COD,A.BUSEO_COD,B.SAWON_NO

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

전체 사원에 대한 자료를 뽑고자 UNION ALL을 사용한 거 같은데..

일단 최종적으로 GROUP BY로 묶는 부분이 보이지 않습니다.

아마도 파워빌더에서 합계처리를 하고자 하시는 모양인데..

특별한 이유가 없다면.. UNION ALL된 자료를 모두 가져갈

필요는 없어 보이네요..

의도를 추측컨대 ANSI OUTER JOIN구문으로 아래와 같이

해결할 수 있을 거 같습니다.

 

글구 중간에 있는 조인 부분의  = 옆에 있는 + 기호는 처음 보는데..

테스트해보니 조인에는 영향을 미치지 않는 거 같습니다.

아마도 공백 문자열과의 더하기 연산으로 인식하는 거 같습니다.

아우터조인의 의도로 쓰신거 같은데 암튼 잘못된 방법입니다.

7.0이전의 아우터조인 기호는 *인데.. 이것도 정상작동하지 않아..

가급적 사용해선 안됩니다.. SQL SERVER에서는 아우터조인시

ANSI 구문만이 의도대로 정상작동합니다..

 

SELECT A.BUSEO_NAME              BUSEO_NAME
      ,B.SAWON_NO                SAWON_NO 
      ,B.EMPL_NAME1              EMPL_NAME1
      ,A.DIV_COD                 DIV_COD  
      ,ISNULL(C.al_cd_1,0)       al_cd_1    
      ,ISNULL(C.al_cd_2,0)       al_cd_2    
      ,ISNULL(C.al_cd_3,0)       al_cd_3    
      ,ISNULL(C.al_cd_4,0)       al_cd_4    
      ,ISNULL(C.al_cd_5,0)       al_cd_5    
      ,ISNULL(C.al_cd_6,0)       al_cd_6    
      ,ISNULL(C.al_cd_7,0)       al_cd_7    
      ,ISNULL(D.GITA_JIGEUB1,0)  GITA_JIGEUB1
      ,ISNULL(D.GITA_JIGEUB2,0)  GITA_JIGEUB2
      ,ISNULL(D.GITA_JIGEUB3,0)  GITA_JIGEUB3
      ,ISNULL(D.GITA_GJE1,0)     GITA_GJE1  
      ,ISNULL(D.GITA_GJE2,0)     GITA_GJE2  
      ,ISNULL(D.GITA_GJE3,0)     GITA_GJE3  
      ,A.BUSEO_COD               BUSEO_COD
FROM TBCMI01 B
     JOIN TBCMI43 A
     ON (A.BUSEO_COD = B.BUSEO_COD)
     LEFT OUTER JOIN
     (
     SELECT Z.EMP_NO
           ,SUM(CASE WHEN Z.ALLOWANCE_CODE LIKE 'DU%' THEN Z.AMOUNT END) al_cd_1 /* 직책수당 */
           ,SUM(CASE WHEN Z.ALLOWANCE_CODE LIKE 'OV%' THEN Z.AMOUNT END) al_cd_2 /* 야근수당 */
           ,SUM(CASE WHEN Z.ALLOWANCE_CODE LIKE 'SH%' THEN Z.AMOUNT END) al_cd_3 /* SHIFT수당 */
           ,SUM(CASE WHEN Z.ALLOWANCE_CODE LIKE 'PC%' THEN Z.AMOUNT END) al_cd_4 /* 장비지원수당 */
           ,SUM(CASE WHEN Z.ALLOWANCE_CODE LIKE 'CA%' THEN Z.AMOUNT END) al_cd_5 /* 차량보조비 */
           ,SUM(CASE WHEN Z.ALLOWANCE_CODE LIKE 'FO%' THEN Z.AMOUNT END) al_cd_6 /* 급식보조비 */
           ,SUM(CASE WHEN Z.ALLOWANCE_CODE LIKE 'SP%' THEN Z.AMOUNT END) al_cd_7 /* 특근수당 */
            END
     FROM PAY_ALLOWANCE_SCHEDUAL Z
     WHERE Z.USE_YN = 'Y'
     AND Z.START_DATE LIKE '200503'
     AND Z.END_DATE   LIKE '200503'
     GROUP BY Z.EMP_NO
     ) C
     ON (B.SAWON_NO = C.EMP_NO)
     LEFT OUTER JOIN
     TBCMK10 D
     ON (B.SAWON_NO = D.SAWON_NO
     AND Y.YEAR_MONTH = '200503')
WHERE (B.TJIK_IL IS NULL OR B.TJIK_IL = '' OR B.TJIK_IL < '200503')
AND B.SAWON_NO like '%'
AND B.BUSEO_COD like '%'
AND A.DIV_COD like '%'
AND B.SAWON_GUBUN in ('1','2','3','4')
M님이 2005-04-26 09:29에 작성한 댓글입니다.
이 댓글은 2005-04-26 09:33에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1918시퀄서버 인증에 대해?
궁금이
2005-04-25
1649
1917identity 값을 수정하고 싶은데... [1]
고영훈
2005-04-25
2022
1916도와주세요 ㅠㅠ
sql처음해요
2005-04-25
1564
1915쿼리부분이 문제가 있는듯 합니다. [1]
이태헌
2005-04-25
3046
1913매개변수에 따라 다른 스토어프로시저 실행이 가능한가요? [1]
오세정
2005-04-25
2175
1912DB 이전 관련 문제.
김우섭
2005-04-25
2449
1911identity 칼럼의 값을 변경할 수 있나요? [1]
왕초
2005-04-24
2684
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다