150 lines
3.4 KiB
Transact-SQL
150 lines
3.4 KiB
Transact-SQL
-- ==========================================
|
|
-- 작업일자: YYYY-MM-DD [쿼리 작성 및 실행 날짜를 기록합니다.]
|
|
-- 작 성 자: [실행자 이름을 기록합니다.]
|
|
-- 작업목적: [예산승인오류가 발생했을 시 확인합니다.]
|
|
-- 요청자/티켓번호: [예산승인부서의 요청시 검토하는 용도입니다.]
|
|
-- 데이타베이스 : MS-SQL
|
|
-- ==========================================
|
|
|
|
declare @pjt_no CHAR(8)
|
|
, @bud_gbn CHAR(1)
|
|
, @chasu TINYINT
|
|
, @update_id CHAR(7)
|
|
, @change_why_gbn CHAR(7)
|
|
, @cnt int
|
|
|
|
DECLARE @tmp_pbudget TABLE
|
|
(
|
|
pjt_no CHAR(8)
|
|
, main CHAR(4)
|
|
, sub CHAR(4)
|
|
, bud_seq INT
|
|
, x_amt DECIMAL
|
|
)
|
|
|
|
select @pjt_no = 'V172T305', @bud_gbn='M'
|
|
|
|
-- POR
|
|
INSERT
|
|
@tmp_pbudget
|
|
SELECT
|
|
a.pjt_no, a.main, a.sub, a.bud_seq, isnull(SUM(b.amt),0) x_amt -- SUM(b.w_amt)
|
|
FROM
|
|
HPOIMS.dbo.gm_por_detail a
|
|
LEFT OUTER JOIN
|
|
(
|
|
SELECT
|
|
por_no, por_seq, SUM(amt) amt, SUM(w_amt) w_amt , SUM(qty) qty
|
|
FROM
|
|
HPOIMS.dbo.gm_po_detail
|
|
GROUP BY
|
|
por_no, por_seq
|
|
)b
|
|
ON
|
|
a.por_no = b.por_no and a.por_seq = b.por_seq
|
|
WHERE
|
|
a.pjt_no = @pjt_no
|
|
-- AND a.qty = b.qty
|
|
AND a.w_amt > b.w_amt
|
|
GROUP BY
|
|
a.pjt_no, a.main, a.sub, a.bud_seq
|
|
|
|
INSERT
|
|
@tmp_pbudget
|
|
SELECT
|
|
a.pjt_no, a.main, a.sub, a.bud_seq, isnull(SUM(b.w_amt),0) x_amt -- SUM(b.w_amt)
|
|
FROM
|
|
HPOIMS.dbo.gm_por_detail a
|
|
LEFT OUTER JOIN
|
|
(
|
|
SELECT
|
|
por_no, por_seq, SUM(amt) amt, SUM(w_amt) w_amt , SUM(qty) qty
|
|
FROM
|
|
HPOIMS.dbo.gm_po_detail
|
|
GROUP BY
|
|
por_no, por_seq
|
|
)b
|
|
ON
|
|
a.por_no = b.por_no AND a.por_seq = b.por_seq
|
|
WHERE
|
|
a.pjt_no = @pjt_no
|
|
-- AND a.qty = b.qty
|
|
AND a.w_amt <= b.w_amt
|
|
GROUP BY
|
|
a.pjt_no, a.main, a.sub, a.bud_seq
|
|
|
|
INSERT
|
|
@tmp_pbudget
|
|
SELECT
|
|
a.pjt_no, a.main, a.sub, a.bud_seq, isnull(SUM(b.w_amt),0) x_amt
|
|
FROM
|
|
HPOIMS.dbo.gm_por_detail a
|
|
LEFT OUTER JOIN
|
|
(
|
|
SELECT
|
|
por_no, por_seq, SUM(amt) amt, SUM(w_amt) w_amt , SUM(qty) qty
|
|
FROM
|
|
HPOIMS.dbo.gm_po_detail
|
|
GROUP BY
|
|
por_no, por_seq
|
|
)b
|
|
ON
|
|
a.por_no = b.por_no AND a.por_seq = b.por_seq
|
|
WHERE
|
|
a.pjt_no = @pjt_no
|
|
AND b.w_amt IS NULL
|
|
GROUP BY
|
|
a.pjt_no, a.main, a.sub, a.bud_seq
|
|
|
|
|
|
-- 직접비
|
|
INSERT
|
|
@tmp_pbudget
|
|
SELECT
|
|
a.pjt_no, a.main, a.sub, a.bud_seq, SUM(a.amt*a.base_rate) x_amt
|
|
FROM
|
|
HPOIMS.dbo.ys_direct_cost a
|
|
WHERE
|
|
a.pjt_no = @pjt_no
|
|
GROUP BY
|
|
a.pjt_no, a.main, a.sub, a.bud_seq
|
|
|
|
|
|
SELECT
|
|
@cnt = COUNT(*)
|
|
FROM
|
|
(
|
|
SELECT pjt_no, main, sub, bud_seq, SUM(x_amt) x_amt FROM @tmp_pbudget GROUP BY pjt_no, main, sub, bud_seq
|
|
)b
|
|
LEFT OUTER JOIN
|
|
HPOIMS.dbo.ys_mbudget a
|
|
ON
|
|
a.pjt_no = b.pjt_no
|
|
AND a.main = b.main
|
|
AND a.sub = b.sub
|
|
AND a.bud_seq = b.bud_seq
|
|
AND a.bud_gbn = @bud_gbn -- 'M'
|
|
WHERE
|
|
b.pjt_no = @pjt_no
|
|
AND ISNULL(a.w_amt,0) < ISNULL(b.x_amt,0)
|
|
AND b.main+b.sub not in ('AB33001', 'AB33002') -- 원가안분 인 경우에는 제외(2011.05.04)
|
|
|
|
SELECT
|
|
b.pjt_no, b.main, b.sub, b.bud_seq, ISNULL(a.w_amt,0) m_amt, ISNULL(b.x_amt,0) x_amt
|
|
FROM
|
|
(
|
|
SELECT pjt_no, main, sub, bud_seq, SUM(x_amt) x_amt FROM @tmp_pbudget GROUP BY pjt_no, main, sub, bud_seq
|
|
)b
|
|
LEFT OUTER JOIN
|
|
HPOIMS.dbo.ys_mbudget a
|
|
ON
|
|
a.pjt_no = b.pjt_no
|
|
AND a.main = b.main
|
|
AND a.sub = b.sub
|
|
AND a.bud_seq = b.bud_seq
|
|
AND a.bud_gbn = @bud_gbn -- 'M'
|
|
WHERE
|
|
b.pjt_no = @pjt_no
|
|
AND ISNULL(a.w_amt,0) < ISNULL(b.x_amt,0)
|
|
AND b.main+b.sub not in ('AB33001', 'AB33002') -- 원가안분 인 경우에는 제외(2011.05.04)
|
|
|