노는날 일하려고 하니 그런지, 영 머리가 안도내요.
좀 도와주십시요.
테이블 A
uid uint
820 0
819 220
테이블 B
num partcode ctscode budget
35 Z Z0101 1000000
테이블 C
uid 는 A의 uid
code_num 은 B 의 num
idx code_num uid used_budget
1 35 819 500000
2 35 820 10000
원하는 결과는 A 의 uint 값이 0 이 아닐때, C의 used_budget 값이 합산이 되어서 used 로 나와야 합니다.
uid 820 조회시
ctscode budget used progress
Z0101 1000000 500000 10000
uid 819 조회시
ctscode budget used progress
Z0101 1000000 500000 500000
Comment 2
-
건우아빠
2015.05.02 11:12
-
생각찾기
2015.05.04 09:20
결과 조회시
T_A 의 UNIT 의 값이 0 인 경우는 예산기안만 작성을 한 경우 입니다. 결제를 안 탄 상태입니다.
결제를 안 탄 상태일때는, 사용예산에 집계가 되지 않습니다.
그래서, 말씀하신 쿼리로는 used(사용예산) 값이 null 이 나오게 됩니다.
결과적으로 원하는 값은
같은 code_num 이 같은 예산인 경우
A 가 0 (기안만 작성한 경우)
code_num 승인예산 사용예산(결제상태가 존재하는 문서들의 합) 현 기안문의 예산
35 1000000 500000 10000
A 가 0 이 아닌경우 (결제진행,결제완료,반려...등등)
35 1000000 500000 500000
예산 관련 내용인데..
CODE_NUM에 따른 예산과 사용예산, 진행중인 예산을 불리 한다음...
UID에 따라서도 사용한예산, 진행중인 예산 을 붙이 시는게 맞지 않을까요....
가용예산이 보여 져야 할듯...
각각의 정보를 따로 가져와서 붙이 시는것도 좋을듯 합니다.
WITH
T_A AS (
SELECT 820 UID, 0 UNIT UNION ALL
SELECT 819 UID, 220 UNIT ) ,
T_B AS (
SELECT 35 NUM, 'Z' PARTCODE , 'Z0101' CTSCODE , 1000000 BUDGET ),
T_C AS (
SELECT 1 IDX , 35 CODE_NUM , 819 UID , 5000000 USED_BUDGET UNION ALL
SELECT 2 IDX , 35 CODE_NUM , 820 UID , 10000 USED_BUDGET )
SELECT T_C.CODE_NUM
, T_B.BUDGET
, SUM( CASE WHEN T_A.UNIT <> 0 THEN T_C.USED_BUDGET END ) USED
, SUM( CASE WHEN T_A.UNIT = 0 THEN T_C.USED_BUDGET END ) PROGRESS
FROM T_C JOIN T_A ON T_C.UID = T_A.UID
JOIN T_B ON T_C.CODE_NUM = T_B.NUM
GROUP BY T_C.CODE_NUM , T_B.BUDGET
-- UID 별 사용,진행상황을 검색 하는 쿼리와 위 CODE_NUM별 예산 상황을 같이 붙여셔야 개별 할듯 합니다...
UID별로 조회시는 예산에따른 상황이 819일 경우 500000원 진행 건인지 사용건인지가 명확하지 않고
언듯 보면 잔여가 0원으로 보여 지고
820 일경우는 동일하게 명확하지 않고 잔여가 49000원이 남아 이ㅛ는걸로 보여 집니다.
이런 경우 전체 얘산중 사용예산과 진행중인 예산 , 잔여 예산 을 보여 주고
별개로 UID별 사용 예산과 진행 예산을 보여주는게 좋을듯 합니다...