안녕하세요. 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
|